Elasticsearch含矛盾语句的布尔查询执行逻辑与结果疑问
Elasticsearch布尔查询逻辑疑问解答
你的查询语句:
{ "query": { "bool": { "must_not": [ { "term": { "field": "value" } } ], "must": [ { "term": { "field": "value" } } ] } }
问题解答:
- 不会返回任何文档,包括field字段为其他值的文档。
- 这里不存在must_not或must谁优先的说法,bool查询的逻辑是必须同时满足所有must条件,且完全不满足任何must_not条件,是严格的逻辑与关系。
- 你的查询中,must要求
field等于value,must_not要求field不等于value,这两个条件完全矛盾,没有任何文档能同时符合,所以结果必然为空。
程序化生成查询的建议:
在自动生成这类查询时,要加一层冲突检测:如果同一个字段在must和must_not中出现完全对立的匹配条件(比如相同term值),要自动清理冲突的条件组,或者抛出异常提示,避免生成这种无效查询。
内容的提问来源于stack exchange,提问作者amseager
相关产品推荐
相关产品推荐

