如何在Elasticsearch中组合嵌套结构的term与range查询
Elasticsearch Nested类型多条件组合查询
因为Elasticsearch的nested字段中每个嵌套对象都是独立存储的,要同时匹配多个嵌套项的条件,必须在bool查询的must数组中分别定义对应的nested查询,确保两个条件分别命中不同的嵌套子文档,且所在的根文档同时满足这两个要求。
以下是符合需求的查询语句:
{ "query": { "bool": { "must": [ { "nested": { "path": "doc_flat", "query": { "bool": { "must": [ {"term": {"doc_flat.key": "status"}}, {"term": {"doc_flat.value_string": "warning"}} ] } } } }, { "nested": { "path": "doc_flat", "query": { "bool": { "must": [ {"term": {"doc_flat.key": "timestamp"}}, {"range": {"doc_flat.value_date": { "gte": "2024-01-01T00:00:00Z", "lte": "2024-01-31T23:59:59Z" }}} ] } } } } ] } } }
关键说明:
- 每个
nested查询指定path: "doc_flat",明确针对该嵌套字段进行查询 - 外层
bool.must确保两个嵌套查询的条件同时成立(根文档必须同时包含符合第一个条件的嵌套项,以及符合第二个条件的嵌套项) - 每个嵌套内部的
bool.must保证单个嵌套项同时匹配key和对应的值条件(比如key=status且value_string=warning)
如果需要调整日期范围,直接修改range中的gte和lte参数即可。
内容的提问来源于stack exchange,提问作者Chris White
相关产品推荐
相关产品推荐

