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

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

us, usa, united states

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

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

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

(+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

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

Шаг 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:

Теперь запрос с примерами ниже и тестом:

Query

  • Национальность: США
  • Национальность: США
  • Гражданство: Соединенные Штаты.
  • Гражданство: Соединенные Штаты Америки

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

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