Как заставить синонимы 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:
Теперь запрос с ниже случаев и тест:
запрос:
- национальность: US
- национальность:США
- Национальность: Соединенные Штаты
- национальность:Соединенные Штаты Америки
все вышеуказанные запросы дадут вам такой же результат.
Примечание:*** импорт данных только после выполнения выше шаги, включая перезапуск solr. Он может не работать с существующими данными(Подробнее см.:AnalyzersTokenizersTokenFilters)