如何通过Elasticsearch REST API查询含指定字段的所有文档
解决Elasticsearch查询存在指定字段的文档问题
你之前用must_not + match查询空字符串的方式不对,因为字段不存在和字段值为空字符串是两种不同的情况,match查询空字符串没法准确过滤掉没有该字段的文档。
正确的做法是用Elasticsearch专门的exists查询,它会直接匹配所有包含指定字段的文档,不管字段值是什么(哪怕是null或者空字符串,只要字段存在就会被命中)。
正确的查询语句
GET index-doc/_search { "query": { "bool": { "must": [ { "exists": { "field": "content_blake3" } } ] } } }
也可以简化写法,直接用exists作为顶层查询:
GET index-doc/_search { "query": { "exists": { "field": "content_blake3" } } }
如果你的需求是字段存在且值不为空字符串,可以组合exists和must_not match:
GET index-doc/_search { "query": { "bool": { "must": [ { "exists": { "field": "content_blake3" } } ], "must_not": [ { "match": { "content_blake3": "" } } ] } } }
内容的提问来源于stack exchange,提问作者JGilmartin
相关产品推荐
相关产品推荐

