【发布时间】: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