持久化

编辑

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}

仓库模块提供了许多功能和工具来配置和自定义行为,并支持扩展您自己的自定义仓库类。

请参考 文档 以获取更多信息。

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