在RoR应用程序中搜索类似的短语

时间:2013-02-11 15:04:23

标签: ruby-on-rails sunspot sunspot-rails

我是Rails的初学者,我正在使用Sunspot来实现搜索功能。

我想搜索患者姓名。到目前为止,我使用全文方法进行搜索,它正在运行。但是我希望实现以下功能。

如果名称是John Smith,我希望在使用字符串'Smi'搜索时显示此结果

我正在咨询Sunspot文档,但没有找到解决方案

1 个答案:

答案 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>

不要忘记重新启动服务器并重新索引模型以使更改生效。