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

时间:2014-02-25 00:05:04

标签: ruby-on-rails elasticsearch tire

我有2个模型,PlayerItemplayer有许多items

Item模型的映射:

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

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

end

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

我无法弄清楚在保存player 时如何指定item(父级)。在我在网上找到的所有父/子关系示例中,他们只使用CURL:

curl -XPOST localhost:9200/authors/book/1?parent=2 -d '{
  "name": "Revelation Space",
  "genre": "scifi",
  "publisher": "penguin"
 }'

2 个答案:

答案 0 :(得分:4)

此示例可能正是您要查找的内容:https://gist.github.com/demirhanaydin/6548883

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

在父子关系中,子文档存储在与父文档相同的分片上,因此将查看其父路径值的父ID。

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

答案 1 :(得分:-1)

我对RoR很新,对轮胎一无所知,所以这根本没有帮助。如果:

class Item < ActiveRecord::Base
belongs_to :player
end

class Player < ActiveRecord::Base
has_many :items
end

然后项目表应该有一个player_id(外键),你可以设置它来指定项目的父项。