访问Solr,使用Sunspot和RSolr的区别,就好像访问数据库,ActiveRecord和直接SQL查询之间的区别,一个是封装好的方法,一个是原生最直接访问的方法。
一个简单易用,更贴近业务模型,一个晦涩难懂,但更能发现问题,发挥性能。
之前也介绍过Solr查询的语法,Solr里面设置检索条件可以有两个参数,一个是q,一个是fq,分别对应两个概念Queries和Filters。
比如搜索文章的标题和发布时间,可以这样:
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