我正在搜索2天,使用sunspot solr
查询关键字搜索。我无法理解
我的预期输出是
如果我搜索laptops in US
,它应该搜索笔记本电脑和我们
但是下面的代码只搜索笔记本电脑而不是其他字样。我怎样才能实现它。
我的全文很有效
我已编辑schema.xml
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我的模型包含
searchable do
text :title,:description,stored: true
time :updated_at
text :product do
product.name if product
end
text :product_model do
product_model.name if product_model
end
end
我的控制器是
@search = Post.search do
fulltext params[:search] do
query_phrase_slop 1
end
end
修改1
我在一列中有两行pizza
而在其他列中有post
行。如果我搜索pizza
,则如果我搜索post
则返回5个结果,则返回1个结果。最后,如果我搜索pizza post
,则结果为无。但预期的产出是获得6个结果。
我将fulltext params[:search] do
更改为keywords params[:search] do
修改2
def index
@search = Post.search do
fulltext params[:search].split(' ') do
phrase_slop 1
end
end
@posts = @search.results
end
答案 0 :(得分:3)
最后,我们发现了什么是错的(评论),但我会把它作为一个答案,所以问题可能会被解决。
您应该将minimum_match
添加到search
块中,即:
@search = Post.search do
fulltext params[:search] do
query_phrase_slop 1
minimum_match 1
end
end
如果未提供该选项,则默认为“所有字词匹配”(source)。