下面讲讲我一般使用的场景
- 我是先使用filter把不需要的过滤掉,例如现在有一个电子商务的网站,我要查询一个category的id为1下面的所有产品,那么我首先会使用filter把category id等于1的产品过滤出来,也就是查出来
- 对于上面的filter出来的结果我再这个category下面查询name为“五子弥勒”的产品,这个时候我就会使用query,为什么呢,因为可能有的产品的name完全match 这个“五子弥勒”的关键字,但是有的产品可能只会match其中的一个词汇,所以,如果我需要把有相似性的查出来,这个是query是具备这个功能的,query的本质不是筛选,而是查询。query他会给结果打分,然后按照分数进行一个排序,如果命中的比较多,分数自然就很高,那么就会排在前面。这里提到了一个打分的概念,个人认为这个打分主要还是看分词器对他的命中,然后给一个评估,关于分词器,我会在后面的博客中提到。
所以,这个时候,大家应该知道filter和query的主要区别了,另外关于性能的我在提一下,上面提到 filter 是不进行打分的,他只是一个筛选,对不感兴趣的直接筛选掉;而query需要打分,可以想象成是一个命中率的概念,是一个率,不过如果你不想看到打分,你可以通过参数去控制,结果也就没有排序了,但是实际上,对性能的提升不大,因为主要的性能不是放在排序上面,而是在匹配上面