elasticsearch

elasticsearch小记之——must和filter的主要区别

must的性能要低一些,为什么?因为他要进行打分评估,也就是说要进行_score,而filter则不会。

下面讲讲我一般使用的场景

一般来说,我是先使用filter把不需要的过滤掉,例如现在有一个电子上午的网站,我要查询一个category的id为1下面的所有产品,那么我首先会使用filter把category id等于1的产品过滤出来,也就是查出来,因为然后我再这个category下面查询name为“五子弥勒”的产品,这个时候我就会使用query,为什么呢,因为可能有的产品的name完全match 这个“五子弥勒”的关键字,但是有的产品可能只会match其中的一个词汇,所以,如果我需要把有相似性的查出来,这个是query是具备这个功能的,因为query的本质不是筛选,而是查询,他会给结果打分,然后按照分数进行一个排序,如果命中的比较多,分数自然就很高,那么就会排在前面。那么这里存在一个打分的概念,个人认为这个打分主要还是看分词器对他的命中,然后给一个评估,关于分词器,我会在后面的博客中提到。

所以,这个时候,大家应该知道filter额query的主要区别了,另外关于性能的我在提一下,elasticsearch·中分为filter和query,所有的filter是不进行打分的,因为她只是一个筛选,对不感兴趣的直接筛选掉,所以他没必要对不感兴趣的东西进行一个打分,而query刚好相反,他实际上你可以理解成,他是一个命中率的概念,是一个率,所以打分是有必要的,作为一个搜索引擎,另外如果你不想看到打分,你可以通过参数去控制,但是实际上,对性能的提升不大
————————————————