2013-09-13 4 views
0

У меня возникли трудности с получением новых синонимов для работы с SOLR. Нечетным является то, что записи образцов в файле sysnonyms.txt, который поставляется с дистрибутивом. Ничего нового, что я добавляю, нет.solr синоним не работает

Например, synonyms.txt имел следующий пример:

ГБ, GIB, гигабайт, гигабайты

Я тогда запрашивая поля вызова «субъект» с использованием одного из приведенных выше терминов ,

Предмет: гб

Предмет: контрклин

и т.д ...

Независимо от того, какой из этих терминов, которые я использую в моем запросе, я получаю тот же результат, установленный еще в ожидается.

Далее я добавил следующую строку synonyms.txt:

Ibm, Ibm, международный бизнес-машина

И я убедился, что в schema.xml, то FieldType text_general (FieldType используется поле «Тема») имеет SynonymFilterFactory включена для индекса следующим образом:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Наконец, поскольку мои данные в тузде datab ase, я затем повторно импортировал все данные с помощью dataimport, предполагая, что это то, что мне нужно сделать для переиндексации.

Однако, в то время как запрос на тему: IBM»возвращает несколько результатов, запрос на„тему:.? IBM“ничего не возвращает

Что я делаю неправильно

+0

Хорошо, у меня есть частичный ответ на мой собственный вопрос. Кажется, что запрос имеет проблемы с «периодами» в «i.b.m.». В качестве теста я добавил еще одно связанное слово «bbbbb», связанное с ibm, и это работает. Теперь мне просто нужно выяснить, как получить аббревиатуры с периодами работы. Какие-либо предложения? – jamas

ответ

0

Хорошо, я полагаю, что я понял это и теперь, похоже, работает так, как я намеревался.

Я заменил StandardTokenizerFactory на ClassicTokenizerFactory, а также добавил ClassicFilterFactory в цепочку. В результате я получаю токены с периодами, которые были удалены, и это кажется

Итак, вот мое обновленное определение для text_general:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.ClassicTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ClassicFilterFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.ClassicTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ClassicFilterFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
    </analyzer> 
</fieldType> 
+0

У вас есть какие-либо ссылки или вы могли бы объяснить, как вы пришли к этому решению? –

0

Вы должны позволить фильтру синонимов знать, что токенизатор используется для tokenizing входного текста:

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <!--- ... --> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.StandardTokenizerFactory"/> 
    <!--- ... --> 
    </analyzer> 
</fieldType> 
Смежные вопросы