Elasticsearch 获取与查询匹配的文档的兄弟文档

Elasticsearch get sibling documents for a document matching a query

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

我希望能够提交匹配子文档和 return 匹配子文档的兄弟文档的查询。

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

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

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

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

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

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