Elasticsearch使用parent-join时如何仅查询父文档不返回子文档
只查询父文档的Elasticsearch查询方案
核心逻辑:使用term查询直接过滤join类型字段的关系名称,匹配你定义的父文档类型即可实现仅返回父文档的效果。
前提说明
假设你创建索引时定义的join字段配置如下(可替换为自己实际的字段名和父类型名):
PUT /your_index { "mappings": { "properties": { "join_field": { "type": "join", "relations": { "your_parent_type": "your_child_type" } } } } }
上述配置中,join_field是你自定义的join字段名,your_parent_type是你设置的父文档关系名称,your_child_type是子文档关系名称。
仅查询父文档的语句
直接对join字段做精确匹配即可:
GET /your_index/_search { "query": { "term": { "join_field": "your_parent_type" } } }
你也可以写完整的字段路径,效果完全一致:
GET /your_index/_search { "query": { "term": { "join_field.name": "your_parent_type" } } }
原理解释
所有使用join类型的文档都会在对应字段中存储自身的关系类型:
- 父文档的join字段值就是你定义的父类型名称
- 子文档的join字段会包含自身类型和关联的父文档ID
因此通过精确匹配父类型名称,就可以过滤掉所有子文档,仅返回父文档结果。
内容的提问来源于stack exchange,提问作者DunDar
相关产品推荐
相关产品推荐

