2012-05-23 68 views
0

在我的Rails应用程序中,我有一个问题模型,用sunspot solr设置,带有一个字段“text”,我想在该字段中搜索字词之间的逻辑或。我发现将minimum_match设置为1解决了我的问题,但是我还想通过提高具有多个单词匹配的问题来排序结果。有没有办法与Solr做到这一点?这些文档对于排名功能没有什么帮助。Solr最低匹配结果排名

编辑:这是我在表演控制器

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

回答

1

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

通过Solr的查询解析器(SolrQueryParser)使用的默认操作者可以 与

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

默认操作者被配置为 “或” 如果未指定。最好不要使用 或依靠此设置;而是请求处理程序或查询 LocalParams应指定默认运算符。这里的设置 可以省略,并且正在考虑进行弃用。

你可以改变你defaultOperator Solr中/ conf目录/ schema.xml中或者你可以通过类似语法https://github.com/sunspot/sunspot/wiki/Building-queries-by-hand

确实太阳黑子的默认运算符“和”使用LocalParams指定或者像https://github.com/sunspot/sunspot/blob/master/sunspot_solr/solr/solr/conf/schema.xml引用

0

逻辑完整的查询,或者太阳黑子使用的Dismax请求处理程序的默认行为。

再加上,更多的单词匹配,较高的文档的得分(这听起来像你想要的)

Question.search do 
    fulltext 'best pizza' 
end 

...应该返回匹配一个结果或两个词(返回匹配这两者的的那些在前):

  1. “乔通过在纽约片有最好的比萨
  2. “很难说哪个比萨饼 PLA CE是最好
  3. 比萨不是最好食物让你”
  4. ‘我不在乎比萨饼是否是对你不好!’
  5. “你认为最好快餐类型是?”

minimum_match仅当您要过滤掉低相关性结果(其中只有某个较低的数字或百分比的条目实际匹配)时才有用。这不会影响评分或逻辑OR/AND行为。

+0

根据我的经验,也注意到[这里](http://blog.websolr。com/post/1299174416/how-do-i-query-with-boolean-logic-using-sunspot)和[here](http://sunspot.github.com/sunspot/docs/Sunspot/DSL/StandardQuery.html )在最小匹配段落时,搜索的默认行为是单词之间的逻辑与。此外,我正在使用这种过滤器''我不知道是否会导致默认行为... –

+0

将dismax评分视为偏向与查询中最匹配条件匹配的文档更容易。这是大多数人期望的搜索行为。你发布的第一个链接解释得非常好。 ':minimum_match => 1'应该是默认值。它只有在你增加它时才会生效(这会将结果限制在更多项匹配的文档中)。 –

+0

NGramFilterFactory只在几个特定的​​情况下才有用(EdgeNGramFilterFactory有助于前缀搜索/自动完成)。你可能会匹配你不想要的一堆结果(例如,搜索'zz'将与'pizza'匹配)。也许你可以发布更多关于你想要做的事情。 –