0

由于几个原因,我们正在从 Thinking Sphinx 转换为 Sunspot。我必须重写搜索逻辑,但是我不确定如何转换以下内容:

我想将搜索 :any 转换为 Sunspot。这意味着并非所有关键字都需要存在才能使对象匹配。(任何关键字都可以,并按相关性排序)。但是我在 Sunspot 文档中找不到它。

# Thinking Sphinx

search_result = Business.search([attributes[:name],attributes[:address]], match_mode: :any)

我也在寻找一种通过 Sunspot 轻松将停用词添加到 Solr 的方法。Thinking Sphinx 提供了一种在 yml 中指定它的方法。但是在 Sunspot::Rails yml 中没有等价物。

4

1 回答 1

2

太阳黑子的最小匹配

并非所有关键字都需要存在才能使对象匹配

在 Solr 中,这是“最小应该匹配”的概念。您可以查看之前的一些答案、我的一篇博客文章以及有关该主题的 Solr wiki 文档:

与您在上面编写的类似查询可能如下所示...

@search = Business.search do
  fulltext query_string, :minimum_match => 0
end
@businesses = @search.results

停用词

对于停用词,我可能会首先建议您不要使用它们。Solr 的 DisMax 算法应该可以忽略常用术语来对结果进行排序。我真正需要停用词的唯一一次是通过对文本字段进行分面来生成词云。

因此,如果您确实需要停用词,请将StopFilterFactory添加到文本字段的analyzer块中。在您的目录(与您的目录相同的目录)中创建一个相应的stopwords.txt文件。solr/confschema.xml

(默认情况下,Sunspot 配置实际上应该附带一个示例stopwords.txt文件。)

于 2011-12-09T19:13:11.160 回答