Как заставить синонимы solr работать

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

США, США, США

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

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

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

(+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 ответов


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

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


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

Шаг 1:

скачать страна-синонимы.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)