2015-02-23 2 views
1

Я использую gem sunspot_solr для полнотекстового поиска, но мне нужна поисковая подстрока, например: «teststring», мне нужно найти эту команду: «est», «tr», «ing» ...Поиск подстроки с Rails Solr

Что мне нужно для этого?

ответ

2

Вы можете найти ниже thedetails поиска подстроки с использованием 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 

Больше Refere:

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

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

+1

й ank вы очень много !!! Вы мне поможете! –

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> 

Смежные вопросы