Solr中Queries和Filters的区别

访问Solr,使用SunspotRSolr的区别,就好像访问数据库,ActiveRecord和直接SQL查询之间的区别,一个是封装好的方法,一个是原生最直接访问的方法。

一个简单易用,更贴近业务模型,一个晦涩难懂,但更能发现问题,发挥性能。

之前也介绍过Solr查询的语法,Solr里面设置检索条件可以有两个参数,一个是q,一个是fq,分别对应两个概念Queries和Filters。

q AND fq

比如搜索文章的标题和发布时间,可以这样:

q=title: 标题 AND publish_date: [xxx TO xxxx]

也可以

q=title: 标题 & fq=publish_date: [xxx TO xxxx]

两种方式都可以返回正确的结果。

那么问题来了,哪种方式更好呢?还是说随意选择?

特意查找了一下,Stackoverflow上面也有人提出了类似的问题,http://stackoverflow.com/questions/14595988/queries-vs-filters

总结一下:
1、filters 可以被缓存,而且不会影响结果的分数,因此会比queries快(性能好)。

filters are cached and don’t influence the score, therefore faster than queries.

2、一般而言,filters用于检索有确切值、或者binary类型的搜索;而queries用于全文文本检索以及那些结果得分依赖的字段。

As a general rule, filters should be used instead of queries:

  • for binary yes/no searches
  • for queries on exact values

As a general rule, queries should be used instead of filters:

  • for full text search
  • where the result depends on a relevance score