如何使用 Tire 指示父/子关系中对象的父对象

Rob*_*bin 2 ruby-on-rails elasticsearch tire

我有 2 个型号,Player并且Item. Aplayer有很多items.

模型的映射Item

tire do
  mapping(
    _parent: { type: 'player' },
    _routing: { required: true, path: :user }
  ) do

  indexes :user, type: "string", index: :not_analyzed

end
Run Code Online (Sandbox Code Playgroud)

(不确定该path选项是什么,除了它可能用于将项目存储在不同的分片上?

我不明白的是如何player在保存item. 在我在网上找到的所有父/子关系示例中,他们只是使用 CURL:

curl -XPOST localhost:9200/authors/book/1?parent=2 -d '{
  "name": "Revelation Space",
  "genre": "scifi",
  "publisher": "penguin"
 }'
Run Code Online (Sandbox Code Playgroud)

Aks*_*hay 5

这个例子可能就是您正在寻找的:https://gist.github.com/demirhanaydin/6548883

默认情况下,Elasticsearch 将使用文档 Id 来处理路由,它会对 ID 进行哈希处理并计算分片数量的模数,以确定应将其存储在哪个分片上。如果您提供覆盖此默认行为的路由值。

在父子关系中,子文档与父文档存储在同一分片上,因此将查看父 ID 以获取其路由值。

路径值是 Elasticsearch 应该在存储的文档中查找路由值的位置。如果它设置为“用户”,它将使用该字段。