синоним solr не работает

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

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

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

Затем я запрашиваю тему полевого вызова, используя один из приведенных выше терминов.

тема:gb

тема:гиб

и т.д...

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

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

IBM, i.b.m., международная бизнес-машина

И я убедился, что в schema.xml тип поля text_general (тип поля, используемый субъектом поля) включает 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>

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

Однако, хотя запрос subject:ibm возвращает несколько результатов, запрос subject:i.b.m. ничего не возвращает.

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


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


Ответы (2)


Хорошо, я думаю, что понял это, и теперь это работает так, как я планировал.

Я заменил 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>
person jamas    schedule 16.09.2013
comment
У вас есть ссылки или вы могли бы объяснить, как вы пришли к этому решению? - person Tadas T; 11.08.2014

Вам нужно сообщить фильтру синонимов, какой токенизатор используется для токенизации входного текста:

<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>
person Tadas T    schedule 11.08.2014