DSL中AND、OR、NOT运算符优先级及两类查询差异咨询
解答
1. 两个查询的逻辑差异
结合运算符优先级拆解逻辑即可明确差异:
示例查询的
query字符串:messi NOT barca AND psg
按优先级先执行NOT再执行AND,等价于:(messi NOT barca) AND psg
匹配要求:文档name字段同时满足:包含messi且不包含barca,并且包含psg。对比查询的
query字符串:messi AND barca NOT psg
同样先执行NOT再执行AND,等价于:messi AND (barca NOT psg)
匹配要求:文档name字段同时满足:包含messi,并且包含barca且不包含psg。
两者匹配逻辑完全相反:示例查询排除含barca的文档,对比查询要求必须包含barca且排除psg。
2. 运算符优先级顺序
在Elasticsearch的query_string语法中,运算符优先级从高到低为:
- NOT(最高优先级,最先执行)
- AND(次之)
- OR(最低优先级,最后执行)
举例说明:a OR b AND c NOT d会被解析为:a OR (b AND (c NOT d))
内容的提问来源于stack exchange,提问作者sim
相关产品推荐
相关产品推荐

