我是Rails的初学者,我正在使用Sunspot来实现搜索功能。
我想搜索患者姓名。到目前为止,我使用全文方法进行搜索,它正在运行。但是我希望实现以下功能。
如果名称是John Smith,我希望在使用字符串'Smi'搜索时显示此结果
我正在咨询Sunspot文档,但没有找到解决方案
答案 0 :(得分:0)
如果您想在全文搜索中返回子字符串,可以查看Full text Searching。
如果您想对搜索结果进行分页,则可以在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>
不要忘记重新启动服务器并重新索引模型以使更改生效。