Elasticsearch Query查询和Filter过滤区别

查询在Query查询上下文和Filter过滤器上下文中,执行的操作是不一样的:

1.查询上下文:是在使用query进行查询时的执行环境,比如使用search的时候

    在查询上下文中,查询会回答这个问题——“这个文档是否匹配这个查询,它的相关度高吗?”

    ES中所以你的数据都会存储一个_score分值,分值越高就代表越匹配,即使Lucene使用倒排索引,对于某个搜索的分值计算还是需要一定的时间消耗。


2.过滤器上下文:在使用filter参数时候的执行环境,比如在bool查询中使用must_not或者filter

    在过滤器上下文中,查询会回答这个问题——“这个文档是否匹配?”

    他不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一些

    另外,经常使用过滤器,ES会自动地缓存过滤器的内容,这对于查询来说,会提高很多性能。


总而言之:

1.查询上下文:查询操作不仅仅会进行查询,还会进行分值的计算,用于确定相关度

2.过滤器上下文:查询操作仅判断是否满足查询条件,不会计算得分,查询的结果可以被缓存

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容