sunspot-solr:如何排除包含任何给定单词的搜索结果?

时间:2012-12-06 23:23:36

标签: ruby-on-rails ruby solr sunspot-solr websolr

我有一个使用solr的Ruby on Rails应用程序。我使用太阳黑子宝石。我也将websolr用于生产环境。

我知道我们可以用太阳黑子solr进行全文搜索。但我也希望能够排除任何具有给定单词的命中(最终结果)。

示例类:

class Article
    searchable do
        text :title
        text :content
    end
end

现在,我想在其内容中搜索包含“Obama”的文章,但也希望排除那些包含“Lady”的文章加加“即可。我知道我可以在返回的结果数组上应用拒绝块,但我想在Solr级别上处理这种情况。

希望我清楚地说明了我的问题。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

来自https://github.com/sunspot/sunspot/wiki/Fulltext-search

  

解析普通布尔查询语法的一小部分:特别是,匹配良好的引号可用于划分短语,而 +和 - 运算符可用于分别要求或排除单词

那是你在找什么?

答案 1 :(得分:1)

我会使用adjust_solr_params将edismax与否定条款一起使用。

Article.search do
  fulltext params[:q]
  adjust_solr_params do |solr|
    solr['defType'] = 'edismax'
    solr['q'] += %( -"some phrase to exclude")
  end
end

不是最明显的方法,当然没有记录,我没有测试过,但它应该有用。希望未来版本的太阳黑子能更加原生地支持edismax。