3

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

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

示例类:

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

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

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

在此先感谢您的帮助。

4

2 回答 2

3

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

解析正常布尔查询语法的一小部分:特别是,可以使用匹配良好的引号来划分短语,并且可以使用 + 和 - 运算符分别要求或排除单词

那是你要找的吗?

于 2012-12-07T00:52:13.813 回答
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

不是最明显的方法,当然没有记录,也没有测试过,但它应该可以工作。希望未来版本的 Sunspot 能够更原生地支持 edismax。

于 2012-12-07T16:36:27.063 回答