我有一个使用solr的Ruby on Rails应用程序。我使用太阳黑子宝石。我也将websolr用于生产环境。
我知道我们可以用太阳黑子solr进行全文搜索。但我也希望能够排除任何具有给定单词的命中(最终结果)。
示例类:
class Article
searchable do
text :title
text :content
end
end
现在,我想在其内容中搜索包含“Obama”的文章,但也希望排除那些也包含“Lady”的文章加加“即可。我知道我可以在返回的结果数组上应用拒绝块,但我想在Solr级别上处理这种情况。
希望我清楚地说明了我的问题。
提前感谢您的帮助。
答案 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。