由于一些原因,我们正在从思维狮身人面像转换为太阳黑子。我必须重写搜索逻辑,但我不确定如何转换以下内容:
我想将搜索转换为:任意太阳黑子。这意味着并非所有关键字都必须存在才能使对象匹配。 (任何关键字都可以,并且将按相关性排序)。但是我在Sunspot文档中找不到它。
# Thinking Sphinx
search_result = Business.search([attributes[:name],attributes[:address]], match_mode: :any)
我也在寻找一种方法,通过Sunspot轻松添加停用词到Solr。 Thinking Sphinx提供了一种在yml中指定它的方法。但是在Sunspot :: Rails yml中没有等效的东西。
答案 0 :(得分: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/conf
相同的目录)中创建相应的schema.xml
文件。
(默认情况下,太阳黑子配置应该附带一个样本stopwords.txt
文件。)