2013-02-11 59 views
0

我是Rails的初学者,我正在使用Sunspot来实现搜索功能。在RoR应用程序上搜索类似的短语

我想搜索患者姓名。到现在为止使用全文方法进行搜索,它正在工作。不过,我想实现以下功能。

如果名字是约翰·史密斯,我想,当我以字符串搜索中显示这个结果“SMI”

我咨询太阳黑子文档,但没有找到一个解决方案

回答

0

如果您想要在全文搜索中返回子字符串,你可以看看Full text Searching

如果你想要做你的结果的分页是来自于搜索比你可以在myapp/config/initializers/与添加文件sunspot_solr.rb对结果进行分页:

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> 

不要忘了重新启动服务器,重新索引你的模型,以使更改生效。