我刚刚完成了 sunspot_rails 的设置,除了一件事之外,它似乎运行良好。在我制作了如下 3 条记录后
- 姓名=约翰
- 姓名=约翰2
- 姓名=约翰3
当我用关键字“John”搜索时,只显示第一条记录。看起来完全匹配。我想让它们都显示为搜索结果。
这应该默认发生吗?还是我设置错了什么?
我刚刚完成了 sunspot_rails 的设置,除了一件事之外,它似乎运行良好。在我制作了如下 3 条记录后
当我用关键字“John”搜索时,只显示第一条记录。看起来完全匹配。我想让它们都显示为搜索结果。
这应该默认发生吗?还是我设置错了什么?
如果要在全文搜索中返回子字符串,可以查看
https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search
您还可以sunspot_solr.rb
在 myapp/config/initializers/ 中添加一个用于对结果进行分页的文件:
Sunspot.config.pagination.default_per_page = 100
为这种情况返回 100 个结果。
添加:
您的schema.xml
文件创建于yourappfolder/solr/conf
您也可以添加<filter class="solr.NGramFilterFactory"/>
以匹配任意子字符串。
这是我对 schema.xml 的特定配置:
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldtype class="solr.TextField" name="text_pre" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
</analyzer>
</fieldtype>
对我来说,它确实适用于所有关键字的完整字符串和子字符串。请不要忘记重新启动服务器并重新索引您的模型以使更改生效。
问候!
谢谢!!!
阻止女孩控制器(girls_controller.rb)
def index
@search = Girl.search do
fulltext params[:search]
end
@girls = @search.results
# @girls = Girl.all
#
# respond_to do |format|
# format.html # index.html.erb
# format.json { render json: @girls }
# end
end
阻止女孩模型(girl.rb)
searchable do
text :name_en, :name_es, name_ja
end