我有2个模型,Player
和Item
。 player
有许多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"
}'
答案 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(外键),你可以设置它来指定项目的父项。