Solr最小匹配结果排名

时间:2012-05-23 10:12:26

标签: solr sunspot sunspot-rails

在我的Rails应用程序中,我有一个问题模型,使用sunspot solr设置,带有字段“text”,我想在该字段中搜索字之间的逻辑OR。我发现将minimum_match设置为1可以解决我的问题,但是我也希望通过提升超过1个单词匹配的问题来排序结果。 Solr有办法做到这一点吗?该文档对排名函数没有实际帮助。

编辑:这是我在控制器中执行的完整查询

@questions = Question.solr_search do
  fulltext params[:query], :minimum_match => 1
end.results

2 个答案:

答案 0 :(得分:1)

根据http://wiki.apache.org/solr/SchemaXml

  

Solr的查询解析器(SolrQueryParser)使用的默认运算符可以   配置

<solrQueryParser defaultOperator="AND|OR"/>. 
  

如果未指定,则默认运算符为“OR”。最好不要使用   或依赖此设置;而是请求处理程序或查询   LocalParams应指定默认运算符。这个设置可以   被省略,正在考虑弃用。

您可以在solr / conf / schema.xml中更改defaultOperator,也可以使用LocalParams通过https://github.com/sunspot/sunspot/wiki/Building-queries-by-hand

等语法指定OR

真正的太阳黑子的默认运算符是“AND”,如https://github.com/sunspot/sunspot/blob/master/sunspot_solr/solr/solr/conf/schema.xml

中所引用的那样

答案 1 :(得分:0)

逻辑OR是太阳黑子中使用的Dismax请求处理程序的默认行为。

另外,单词越匹配,文档得分越高(听起来就像你想要的那样)

Question.search do
  fulltext 'best pizza'
end

...应返回与一个或两个单词匹配的结果(返回与两个单词匹配的单词):

  1. “乔在纽约的切片中有最佳披萨
  2. “很难说哪个披萨的地方是最佳
  3. 披萨不是最好的食物”
  4. “我不在乎披萨对你不好!”
  5. “您认为最佳类型的快餐是什么?”
  6. minimum_match仅在您希望过滤掉低相关性结果(其中只有一定数量或百分比的术语实际匹配)时才有用。这不会影响评分或逻辑OR / AND行为。