我很確定我知道這個問題的答案,但我正在尋找比我更多的Elasticsearch經驗的人的確認。在Elasticsearch中處理多對多關係的最佳實踐?
比方說,我有一個包含作者和書籍的數據庫。作者可以與0本或更多書相關聯,並且書可以與1個或更多作者相關聯。我們希望用戶能夠搜索作者姓名以查找作者和他/她的所有書籍,並且我們還希望他們能夠搜索書名以找回作者。我們知道會有大量的多作者書籍。
因爲Elasticsearch只直接支持一個級別的父子關係,並且因爲孩子只能有一個父母,所以在我看來,我們需要對數據進行非規範化並使用嵌套對象來建立這種關係。如果我們修改已出版23本書的作者的屬性,我們需要重新索引作者記錄和他/她的所有23本書記錄。
在我的幻想世界中,我很想讓這23本書中的每本都包含一組作者ID,這樣我就不必在重新編制索引作者時重新索引書籍。如果一本書只能有一個作者,但由於多對多的要求,我必須使用嵌套對象並在任何有變化的時候重新索引任何相關對象,這看起來肯定有可能使用Elasticsearch的父 - 子支持。
這是正確的嗎?它看起來像更多的工作(當然還有更多的更新),但我希望以正確的方式來做到這一點,而不是引入複雜性和錯誤和瘋狂的「巧妙」方式。
任何指導,將不勝感激。
是的,你需要進行非規範化。請記住,所有父子關係都提供了路由參數的語法糖,它將搜索或索引操作引導至特定分片,而不是擊中所有分片。與建模工具相比,它更像是性能優化。這真的取決於你在查詢時需要什麼。 – 2015-03-18 11:30:07
@JoelP。你有沒有找到一個最好的方法來防止更新? – 2016-09-19 14:04:43