使用Rails Solr搜索子字符串

时间:2015-02-23 09:03:55

标签: ruby-on-rails ruby solr full-text-search

我使用gem sunspot_solr进行全文搜索,但我需要搜索子字符串,例如:“teststring”,我需要搜索这个输入'est','tr','ing'......

我需要做些什么呢?

2 个答案:

答案 0 :(得分:2)

请使用sunspot

在下面找到子字符串搜索的详细信息

执行前缀/子串匹配的最佳方法是使用NGramFilter (substring) or EdgeNGramFilter (prefix) filters in Solr

首先,在架构中添加新类型:

<fieldType class="solr.TextField" name="text_pre" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

然后

将它添加到schema.xml中:

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

最后

 searchable do
  text :code, :as => :code_textp
  # etc.
end

更多参考:

https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search

https://github.com/sunspot/sunspot/wiki/Wildcard-searching-with-ngrams

答案 1 :(得分:0)

Add this code inside 
rails_dir/solr/conf/schema.xml

Under text/string field type. 

<fieldType name="text" class="solr.TextField" omitNorms="false">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        .
        .
        .
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="back"/>
      </analyzer>