2015-02-23 67 views
1

我使用gem sunspot_solr进行全文搜索,但我需要搜索子字符串,例如:“teststring”,我需要搜索此类型的'est','tr','ing'...搜索子字符与Rails Solr

我需要为此做些什么?

回答

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> 

Then

将此项添加到您的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

非常感谢!你帮助我! – 2015-02-23 09:35:20

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>