【问题标题】:elastic search join/scripted query ,using output of subquery弹性搜索连接/脚本查询,使用子查询的输出
【发布时间】:2016-06-02 20:37:16
【问题描述】:

我有一种情况要在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相关的人 answer= p1
2.现在找p1 answer=p3相关的人。 (目前只要求1级)所以不需要找p3相关的人,最终结果应该是p2,p1,p3。
正常情况下,我们会编写一个嵌套的 sql 来获取结果。我们如何使用弹性查询语言一次性实现这一点

【问题讨论】:

    标签: elasticsearch spring-data-elasticsearch


    【解决方案1】:

    你需要使用Parent-Child-Relationships,但我不会一开始就向你推荐它,因为它的性能不是很好。顺便说一句:还支持Grandparents and Grandchildren

    你也可以使用Application Side Joins——这意味着你执行了几个查询,直到你得到你想要的。 (请注意,第一个结果集应该非常小,否则可能会很昂贵)


    我真正向您推荐的是阅读此docu 并重新考虑您的用例。 如果你想在 facebook 或 google+ 中建模关系,我会告诉你寻找 NoSQL Graph Database


    注意:理想情况下,在 Elasticsearch 中,数据是平坦的,这意味着 denormalized

    【讨论】:

    • 在做了一些研究之后,我觉得像这样的复杂场景需要一个图形数据库。 Neo4j 是我目前正在探索的产品之一。我被困在弹性中解决这个问题,这可能不合适。包含/排除的多个查询将解决这个问题,但代价是什么?如果场景更改查询会增加。此活动可能需要一些时间,但我会在未来更新我的结果。感谢您为我指明一个有帮助的方向。
    猜你喜欢
    • 2012-02-07
    • 2022-06-19
    • 2014-11-09
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多