持久化
编辑持久化编辑
elasticsearch-persistence
Rubygem 为 Ruby 领域对象提供持久化层。
它支持存储库设计模式。6.0 之前的版本也支持活动记录设计模式。
存储库编辑
Elasticsearch::Persistence::Repository
模块提供了存储库模式的实现,并允许保存、删除、查找和搜索存储在 Elasticsearch 中的对象,以及配置索引的映射和设置。
功能编辑
- 访问 Elasticsearch 客户端
- 设置索引名称、文档类型和用于反序列化的对象类
- 组合索引的映射和设置
- 创建、删除或刷新索引
- 查找或搜索文档
- 提供对领域对象和搜索结果的命中率的访问
- 提供对搜索结果的 Elasticsearch 响应的访问
- 定义序列化和反序列化方法
用法编辑
让我们有一个简单的纯 Ruby 对象 (PORO)
class Note attr_reader :attributes def initialize(attributes={}) @attributes = attributes end def to_hash @attributes end end
作为第一步,创建一个默认的“哑”存储库
require 'elasticsearch/persistence' class MyRepository; include Elasticsearch::Persistence::Repository; end repository = MyRepository.new
将 Note
实例保存到存储库中
note = Note.new id: 1, text: 'Test' repository.save(note) # PUT https://127.0.0.1:9200/repository/_doc/1 [status:201, request:0.210s, query:n/a] # > {"id":1,"text":"Test"} # < {"_index":"repository","_type":"note","_id":"1","_version":1,"created":true}
找到它
n = repository.find(1) # GET https://127.0.0.1:9200/repository/_doc/1 [status:200, request:0.003s, query:n/a] # < {"_index":"repository","_type":"note","_id":"1","_version":2,"found":true, "_source" : {"id":1,"text":"Test"}} => <Note:0x007fcbfc0c4980 @attributes={"id"=>1, "text"=>"Test"}>
搜索它
repository.search(query: { match: { text: 'test' } }).first # GET https://127.0.0.1:9200/repository/_search [status:200, request:0.005s, query:0.002s] # > {"query":{"match":{"text":"test"}}} # < {"took":2, ... "hits":{"total":1, ... "hits":[{ ... "_source" : {"id":1,"text":"Test"}}]}} => <Note:0x007fcbfc1c7b70 @attributes={"id"=>1, "text"=>"Test"}>
删除它
repository.delete(note) # DELETE https://127.0.0.1:9200/repository/_doc/1 [status:200, request:0.014s, query:n/a] # < {"found":true,"_index":"repository","_type":"note","_id":"1","_version":3} => {"found"=>true, "_index"=>"repository", "_type"=>"note", "_id"=>"1", "_version"=>2}
存储库模块提供了许多功能和设施来配置和自定义行为,以及支持扩展您自己的自定义存储库类。
有关更多信息,请参阅 文档。
此外,请查看 示例应用程序,它演示了存储库方法对持久化的使用模式。