如何用Elasticsearch的query_string查询特定字段不存在或值为null?
使用query_string查询值为null或不存在的文档
这个需求是可行的,结合你的现有查询,以下是具体实现方式:
情况1:目标字段未设置null_value
如果你的目标字段(比如targetField)没有在mapping中配置null_value,那么字段值为null时不会被Elasticsearch索引,和字段不存在的表现一致。此时可以用NOT _exists_来匹配这两种情况:
{ "query": { "query_string" : { "query" : "stringProperty.keyword:01 AND booleanProperty:false AND NOT _exists_:targetField", "analyze_wildcard" : false, "allow_leading_wildcard": false } } }
情况2:目标字段设置了null_value
如果你的字段在mapping中配置了null_value(比如设置为"NULL"),那么值为null的文档会被索引为指定的null_value,这时候需要同时匹配"字段不存在"和"字段值为配置的null值"两种情况:
{ "query": { "query_string" : { "query" : "stringProperty.keyword:01 AND booleanProperty:false AND (NOT _exists_:targetField OR targetField:NULL)", "analyze_wildcard" : false, "allow_leading_wildcard": false } } }
关键说明
NOT _exists_:fieldName:精准匹配该字段完全不存在于文档中的场景- 若未配置
null_value,字段值为null时不会被索引,因此NOT _exists_可同时覆盖"字段不存在"和"字段值为null"两种情况 - 若配置了
null_value,需用fieldName:配置值匹配值为null的文档,再结合NOT _exists_实现完整需求
内容的提问来源于stack exchange,提问作者lovrodoe
相关产品推荐
相关产品推荐

