【问题标题】:Elasticsearch get sibling documents for a document matching a queryElasticsearch 获取与查询匹配的文档的兄弟文档
【发布时间】:2021-12-06 22:21:51
【问题描述】:

我的 Elasticsearch 索引中有父文档和子文档,通过连接:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/parent-join.html

我希望能够提交与子文档匹配的查询并返回匹配子文档的兄弟姐妹。

我的情况是我将学生分组,索引中的每个学生都是一个单独的子文档,并且同一组中的所有学生都有相同的 parentId。除了 groupId 之外,父文档不包含任何有意义的字段。我的查询是我想通过单个查询获取与学生 X 组中的所有学生的列表。 例如,我的查询类似于:

{
   "query": {
      "match": {
         "studentName": "Bob"
      }
   }
}

我的回复会列出与“Bob”同组的所有学生

注意:我意识到这个问题可以很容易地通过将一组中的孩子嵌套到一个文档中来解决,但是,对于我的用例,我不能这样做,因为我需要支持第二个查询能够按姓名搜索学生并根据相关性按排序顺序返回结果。如果我将学生文档嵌套在同一个文档中,据我了解,我无法再实现第二个查询。

有谁知道是否可以搜索兄弟姐妹查询? 或者更广泛地说,有没有人知道任何 ES 构造,它可以让我实现在单个查询中搜索学生 X 组中的学生和在单个查询中按姓名搜索学生?

【问题讨论】:

  • 您是否尝试过在has_parent 中查询has_child(对您的数据集了解不多)
  • 太棒了。这似乎提供了我所需要的,谢谢!添加我的查询,以便其他人可以看到:` GET my_index/_search { "query": { "has_parent": { "parent_type": "grouping", "query": { "has_child": { "type": "student", "query": { "match" : { "name.keyword": "Bob" } } } } } } ` 这将返回与 Bob 所在组的所有学生的列表
  • 谢谢,我会更新这个答案

标签: elasticsearch lucene


【解决方案1】:

看起来可以通过将has_child 嵌套在has_parent 中来实现。不过,您不能按子文档的属性进行排序 + 此查询会很慢,具体取决于您的索引大小。

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 2013-03-10
    • 2019-03-19
    • 2015-05-03
    • 1970-01-01
    • 2014-08-24
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多