0

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

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

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

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

4

1 回答 1

0

如果要在全文搜索中返回子字符串,可以查看全文搜索

如果您想对来自搜索的结果进行分页,则可以添加一个文件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>

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

于 2013-02-11T15:27:01.387 回答