2015-11-11 3 views
0

Я запускаю приложение rails sunspot solr и таблицу для городов с столбцом с именем name. Существует город под названием «Emmendingen». Я получаю результаты для Emmendi 'Emmendin' 'Emmendige', но не для самого имени 'Emmendingen'.Solr не находит строку поиска

В модели I поиск как этот

search(:include => :geo_name_admin_one_code) do 
    any do 
    fulltext(q, :fields=> [:name]) 
    fulltext(q, :fields=> [:alternate_name]) 
    end 
    with(:feature_class, 'P') 
    order_by(:population,:desc) 
    limit(10) 
end 

Мой конфиг выглядит так

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/> 
    <filter class="solr.ReversedWildcardFilterFactory" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.TrimFilterFactory" /> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.TrimFilterFactory" /> 
    </analyzer> 
</fieldType> 

Так как я могу соответствовать точное название?

ответ

1

Ваша токенированная индексированная форма не может содержать более 10 символов. Вы обрезали его дважды, один раз с помощью NGrams и один раз с EdgeNGrams (что выглядит очень неправильно).

Ваш запрос не обрезает, поэтому ваш символ из 11 слов не соответствует ни одному.

Самый простой способ самостоятельно устранить эту проблему - это экран анализа в пользовательском интерфейсе администратора, в котором вы можете ввести строки индекса и запроса и посмотреть, что произойдет и будут ли они соответствовать.

1

я решил его с этим конфиге

<!-- *** This fieldType is used by Sunspot! *** --> 
<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 
Смежные вопросы