0

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

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

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

2 回答 2

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

确实,Sunspot 的默认运算符是“AND”,如https://github.com/sunspot/sunspot/blob/master/sunspot_solr/solr/solr/conf/schema.xml中所引用

于 2012-11-12T23:03:13.453 回答
0

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

另外,匹配的单词越多,文档的分数就越高(这听起来像你想要的)

Question.search do
  fulltext 'best pizza'
end

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

  1. “Joe's 有纽约市最好的披萨
  2. “很难说哪个披萨店最好
  3. 披萨对你来说不是最好的食物”
  4. “我不管披萨对你有没有坏处!”
  5. “你认为最好的快餐是什么?”

minimum_match仅当您想要过滤掉低相关性结果(实际匹配的术语数量或百分比较低)时才有用。这不会影响评分或逻辑 OR/AND 行为。

于 2012-05-23T19:41:51.007 回答