Ответ 1
Попробуйте использовать SynonymFilterFactory только при индексировании, а не во время запросов.
В документации также предлагается следующее: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
Я пытаюсь установить некоторые основные синонимы в 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, но я бы ожидал, что фильтр синонимов поймет это.
Попробуйте использовать SynonymFilterFactory только при индексировании, а не во время запросов.
В документации также предлагается следующее: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
Для лучшего понимания поиска синонимов у нас будет пошаговый процесс реализации (я использую 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)