太阳黑子中以相同单词开头的数据 rails

Data starting with same words in sunspot rails

我的控制器是

  @search = Sunspot.search(User) do
    fulltext params[:search]
  end
  @search_products = @search.results

我希望它也匹配那些以搜索参数开头的名称

在您的 solr 模式文件中创建一个新类型 (solr/conf/schame.xml)。将此添加到 types 标签下的 schema.xml :

<fieldType class="solr.TextField" name="text_pre" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="10" />
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
</fieldType>

这里minGramSize是最小字符数,maxGramSize是可以搜索的最大字符数。

例如,minGramSize=8 表示像 Kapil Kumar Yadav 这样的词可以用所有这些子字符串搜索 => "K"、"Ka"、"Kap", "Kapi", "Kapil", "Kapil ", "Kapil K", "Kapil Ku", 但不会用长度超过 8 个字符的搜索参数进行搜索,所以建议为 maxGramSize 保留一个适合所有已编入索引的字段的值。

现在在同一个 solr schama 文件中创建一个新的动态字段定义,将其添加到 fields 标签下的 schema.xml:

<dynamicField name="*_textp" stored="false" type="text_pre" multiValued="true" indexed="true"/>

最后配置 User class 中的所有文本字段以使用 as 选项索引到您新创建的动态字段,例如:

class User < ActiveRecord::Base
    searchable do
      text :name, as: :name_textp
      text :address, as: :address_textp
      # etc.
    end
end

我在这里找到这个 Matching substrings in fulltext search