如何解决Elasticsearch查询nested类型geo.country返回空结果的问题
Elasticsearch nested类型字段geo.country查询无结果解决方案
核心原因
- 你定义的
geo是nested嵌套类型,ES会将嵌套结构的内容作为独立的隐藏文档存储,普通的term/match查询无法直接访问嵌套字段的属性,所以直接加geo.country=q的条件会返回空结果。
正确查询写法
你需要使用ES专门的nested查询语法来访问嵌套字段,完整查询DSL示例如下:
POST /index-stats-202110/_search { "query": { "bool": { "must": [ // 原有查询条件保持不变 {"term": {"client_id": "你要匹配的client_id值"}}, {"term": {"campaign_id": "你要匹配的campaign_id值"}}, {"term": {"specs": "events"}}, // 新增nested结构查询geo.country { "nested": { "path": "geo", "query": { "term": { "geo.country": "q" } } } } ] } } }
注意事项
nested查询的path参数必须和你mapping中定义的nested字段名完全一致,此处固定填geo- 嵌套字段的查询条件要写在
nested结构的query内部,字段名必须写全路径geo.country - 你mapping中
country是keyword类型,用term做精确匹配是符合要求的,不需要调整匹配逻辑
内容的提问来源于stack exchange,提问作者dariush
相关产品推荐
相关产品推荐

