2014-02-25 37 views
2

我有2個模型,PlayerItem。 A player有許多items如何使用Tire指示父/子關係中的對象的父對象

Item模型的映射:

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

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

end 

(不知道path的選擇是什麼,但它可能被用來存儲在不同的碎片的項目

什麼我不能?我想知道如何在保存item時指定player(父母)。在我找到的所有父母/子女關係示例中,他們只使用CURL:

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

回答

4

這個例子可能是你在找什麼:https://gist.github.com/demirhanaydin/6548883

默認Elasticsearch將使用文檔ID來處理路由,它會出現亂碼的ID並計算碎片數量的模摸出應該存儲哪一個。如果您提供覆蓋此默認行爲的路由值。

在父 - 子關係中,子文檔與父文檔存儲在同一分片上,因此將查找其父路由值的父ID。

路徑值是存儲文檔中Elasticsearch應該查找路由值的位置。如果它設置爲'user',它將使用該字段。

+0

好的,謝謝你解釋路由如何在父/子關係中工作。 – Robin

+0

另外,我已經找到了你鏈接的要點,但是我希望不必手動完成:'Comment.tire.index.store(comment3,:parent => 1)'。輪胎的udpate_index方法不支持它是很可悲的。 – Robin

+0

非常感謝,我設法讓它工作!雖然我只設法使它與過濾器一起工作,而不是查詢:http://stackoverflow.com/questions/22332740/elasticsearch-query-with-a-parent-child-relationship-failing如果你想看看...理想情況下,我想要一個過濾布爾查詢我想。 – Robin

-1

我對RoR很陌生,對輪胎一無所知,所以這可能根本無濟於事。如果:

class Item < ActiveRecord::Base 
belongs_to :player 
end 

class Player < ActiveRecord::Base 
has_many :items 
end 

那麼項目表應該有一個player_id(外鍵),你可以設置成指定項目的父。

+0

對不起,這與我的問題無關。它實際上與Rails很少有關係,它更多的是關於Tire。不管怎麼說,多謝拉。 – Robin

相關問題