Elasticsearch查询:筛选含指定外内容的bag.contents字段文档
Elasticsearch 查询:筛选包含指定外项的文档
你的场景是:bag.contents为数组类型,存储在text字段并带有.keyword子字段,需要找出所有该字段中至少存在一个元素不属于Apple、Orange、Grape的文档。
之前的错误在于仅筛选了完全不含这三个值的文档,而正确逻辑是排除掉所有元素都属于这三个值的文档,剩下的就是目标结果。
正确的DSL查询语句
{ "query": { "bool": { "must_not": [ { "terms_set": { "bag.contents.keyword": { "terms": ["Apple", "Orange", "Grape"], "minimum_should_match_script": { "source": "doc['bag.contents.keyword'].length" } } } } ] } } }
逻辑说明
terms_set查询用于匹配数组中所有元素都在指定terms列表中的文档:terms定义允许的三个值:Apple、Orange、Grapeminimum_should_match_script设置为数组的长度,要求数组里的每一个元素都必须匹配terms列表中的值,才会命中该查询
- 外层的
must_not会排除所有符合上述条件的文档,剩下的就是至少有一个元素不在允许列表中的文档,完全符合你的需求。
内容的提问来源于stack exchange,提问作者tweak2
相关产品推荐
相关产品推荐

