Как заставить работать solr синонимы - PullRequest
10 голосов
/ 14 января 2012

Я пытаюсь установить некоторые основные синонимы в Solr.Я работал над этим:

США, США, США

Насколько я понимаю, добавление этого в файл синонимов позволит пользователям искать США и возвращать документысодержащие США или Соединенные Штаты.То же самое, если пользователь вводит данные в США или США.

К сожалению, с этим на месте, когда я выполняю поиск, я получаю результаты для элементов, которые содержат все три слова - это делает AND of ofсинонимы, а не ИЛИ.

Если я включаю отладку, то это действительно то, что я вижу (плюс некоторые основы):

(+DisjunctionMaxQuery(((westCite:us westCite:usa westCite:unit) | (text:us text:usa text:unit) | (docketNumber:us docketNumber:usa docketNumber:unit) | ((status:us status:usa status:unit)^1.25) | (court:us court:usa court:unit) | (lexisCite:us lexisCite:usa lexisCite:unit) | ((caseNumber:us caseNumber:usa caseNumber:unit)^1.25) | ((caseName:us caseName:usa caseName:unit)^1.5))))/no_coord

Я что-то делаюнеправильно вызывать это?Мой defaultOperator установлен на AND, но я ожидаю, что фильтр синонимов это поймет.

Ответы [ 2 ]

20 голосов
/ 14 января 2012

Попробуйте использовать SynonymFilterFactory только во время индексации, но не во время запросов.

Документация также предлагает это: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

5 голосов
/ 21 июня 2017

Для лучшего понимания поиска по синонимам, пожалуйста, следуйте пошаговому процессу реализации ниже (я использую solr 6.5. * Версия ):

Шаг 1:

Загрузите country-synonyms.txt текстовый файл и поместите его по следующему пути:

Путь : \ solr-6.5.1 \ server \ solr \ yourCore \ conf

yourCore: Имя ядра должно быть соответственно изменено

Шаг 2:

Добавить тип поля в файл схемы управления по тому же пути, указанному выше:

<fieldType name="country" class="solr.TextField" positionIncrementGap="100" sortMissingLast="true">
<analyzer>
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.TrimFilterFactory"/>
  <filter class="solr.SynonymFilterFactory" expand="false" ignoreCase="true" synonyms="country-synonyms.txt" tokenizerFactory="solr.KeywordTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer></fieldType>

Шаг 3: Добавить свойполе (национальность) с типом страна в том же файле (управляемая схема).

<field name="Nationality" type="country" indexed="true" stored="true"/>

Шаг 4: Перезапустить solr.

solr restart -p <your solr port>

Шаг 5:

Теперь импортируйте ваши данные с полем, содержащим Национальность . ***

Шаг 6:

Теперь запрос с нижеуказанными случаями и проверка:

Запрос :

  1. Национальность: US
  2. Национальность: США
  3. Национальность: США
  4. Национальность: Соединенные Штаты Америки

Все вышеперечисленные запросы дадут одинаковый результат.

Примечание : *** Импортировать данные только после выполнения вышеуказанных шагов, включая перезапуск Solr.Может не работать с существующими данными (подробнее см. AnalyzersTokenizersTokenFilters )

...