2015-02-23 64 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>