如何在Elasticsearch中实现类似SQL WHERE子句的字段相等查询?
Elasticsearch查询字段相等的文档问题解决
你的查询仅返回Division Name和Department Name均为空的文档,核心问题出在字段访问方式和缺少非空判断:
- 使用
doc['field.keyword'].value时,若字段未正确映射为keyword类型,或字段本身无值,会触发隐性的空处理,导致空值文档被误匹配 - 未对字段做非空校验,空值之间的比较会被判定为相等
修正后的查询语句
GET /eval_news/_search { "_source": [ "Department Name", "Division Name" ], "query": { "bool": { "must": [ { "script": { "script": { "source": "params._source['Division Name'] != null && params._source['Department Name'] != null && params._source['Division Name'] == params._source['Department Name']", "lang": "painless" } } } ] } } }
关键改动说明
- 改用
params._source访问字段:直接读取文档原始数据源,无需依赖字段的keyword子字段映射,适配更广泛的字段类型场景 - 添加非空判断:确保只有当两个字段都存在有效值时才进行相等比较,彻底排除空值文档的误匹配
内容的提问来源于stack exchange,提问作者aba2s
相关产品推荐
相关产品推荐

