我有情况在elasticsearch中编写搜索查询,数据如下
{id:"p1",person:{name:"name",age:"12"},relatedTO:{id:"p2"}}
{id:"p2",person:{name:"name2",age:"15"},relatedTO:{id:"p3"}}
{id:"p3",person:{name:"name3",age:"17"},relatedTO:{id:"p1"}}
场景: - 用户希望搜索与p2相关的人员,并使用每个相关人员查找与他们相关的人员
1.首先找到与p2回答有关的人= p1
2.现在找到与p1回答= p3相关的人。 (现在的要求是只去1级)所以不需要找到与p3相关的人。最终的结果应该是p2,p1,p3。
正常场景我们将编写一个嵌套的sql来获得结果。我们如何使用一次性弹性查询语言实现这一点
答案 0 :(得分:1)
只需一次拍摄,你就需要使用Parent-Child-Relationships,但我不会在第一时间向你推荐它,因为它不是很有效。顺便说一下:还支持Grandparents and Grandchildren。
您还可以使用Application Side Joins - 这意味着您可以执行多个查询,直到获得所需内容。 (请注意,第一个结果集应该非常小,否则可能会花费很多)
我真正建议您阅读此docu并重新考虑您的用例。 如果您想建模Facebook或谷歌+等关系,我会告诉您寻找NoSQL Graph Database。
注意:理想情况下,在Elasticsearch中数据是平的,这意味着denormalized。