如何编写Elasticsearch查询语句按status字段筛选对应状态的数据
问题排查
你原有查询的语法不符合Elasticsearch的DSL规范,存在两个明显错误:
- 字段匹配逻辑缺少查询子句声明:不能直接在筛选规则中写
{"字段名": "值"}结构,必须套在term(精确匹配单个值)、terms(匹配多个值任意一个)等查询子句内 - 你需要同时匹配
Active和Inactive两个状态,使用terms查询会比多个should条件更简洁高效
正确查询语句(匹配文档根节点的status字段)
根据你给出的示例数据,你要筛选的是_source根层级下的status字段,直接使用以下查询即可:
GET /customer-fr/_search { "query": { "bool": { "filter": [ { "terms": { "status": ["Active", "Inactive"] } } ] } } }
如果你的status字段是text类型,将字段名替换为status.keyword即可实现精确匹配。
补充:如果需要匹配嵌套对象内的status字段
如果你要筛选的是affiliations、specialties、customerAddresses这类嵌套数组内的status字段,需要使用nested查询,示例如下(筛选affiliations数组中存在status为In-Active的文档):
GET /customer-fr/_search { "query": { "nested": { "path": "affiliations", "query": { "term": { "affiliations.status": "In-Active" } } } } }
内容的提问来源于stack exchange,提问作者MADHUSUDAN RATNALU
相关产品推荐
相关产品推荐

