持久化编辑

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}

存储库模块提供了许多功能和设施来配置和自定义行为,以及支持扩展您自己的自定义存储库类。

有关更多信息,请参阅 文档

此外,请查看 示例应用程序,它演示了存储库方法对持久化的使用模式。