Elasticsearch布尔查询中must与filter共同作用的逻辑是怎样的?
结论
你给出的ES查询结构中,must和filter的执行逻辑确实等同于逻辑与(&&)关系,返回的文档需要同时满足must块和filter块的所有查询条件,任意一个条件不匹配的文档都会被排除。
补充说明
首先你给出的代码示例缺少了外层的bool查询包裹,合法的写法参考如下:
{ "query": { "bool": { "must": { "exists": { "field": "指定字段名" } }, "filter": { "term": { "过滤字段": "目标过滤值" } } } } }
两者的核心差异在于是否参与相关度计算:
must运行在查询上下文中:除了过滤文档,还会为匹配的文档计算相关度评分,评分会直接影响最终返回结果的排序,评分越高的文档越靠前filter运行在过滤上下文中:仅做文档过滤,不会计算相关度评分,ES会自动缓存高频使用的filter查询规则,查询性能远高于must,如果你的查询条件不需要参与排序评分,优先选择filter实现
内容的提问来源于stack exchange,提问作者Akshay Sharma
相关产品推荐
相关产品推荐

