#solr #stop-words
#solr #стоп-слова
Вопрос:
Наш анализатор индексов настроен с помощью solr.StopFilterFactory. Таким образом, стоп-слова не индексируются.
У нас также есть анализатор запросов, настроенный с помощью solr.StopFilterFactory, поскольку мы хотели, чтобы стоп-слова игнорировались в терминах поискового запроса
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
enablePositionIncrements="true"
/>
... ...
В solrconfig.xml Выберите, что SearchHandler настроен на использование параметра SearchComponent минимальное совпадение = 100 %
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="mm">100%</str>
<str name="q.alt">*:*</str>
... ...
Это приводит к тому, что некоторые из наших поисковых запросов с несколькими словами не возвращают результата, например, «rite in the rain». Из-за настроек выше «in» и «the» не индексируются, но минимальное совпадение делает их обязательными, даже если анализатор запросов настроен на удаление стоп-слов.
Есть ли какие-либо настройки, которые позволят нам достичь этого?
Комментарии:
1. проверьте, может ли помочь параметр mm.autorelax cwiki.apache.org/confluence/display/solr /…
2. как указано ниже, mm.autorelax доступен для solr > = 6
Ответ №1:
В этой ситуации вы должны учитывать различные, fieldTypes
участвующие в запросе, различия между этими 2 категориями : solr.TextField
типы, определенные с помощью того же стоп-фильтра, и другие поля. Задействованные различные типы зависят от полей запроса, запрашиваемых через qf
параметр.
Если запрос содержит стоп-слова и 2 категории полей смешаны qf
, у вас возникнет проблема, потому что всегда будет оставаться обязательное предложение, пытающееся сопоставить стоп-слово с полем с «безостановочной фильтрацией» (например, числовое поле или текстовое поле без стоп-фильтра), если вы не установите меньшее значение mm
.
mm.autoRelax
param для анализатора edismax предназначен для обработки этого неправильного поведения и доступен с версии Solr 6.0 (SOLR-3085) :
Если true, количество требуемых предложений (минимум должен совпадать) будет автоматически уменьшено, если предложение удалено (например, с помощью фильтра стоп-слов) из некоторых, но не всех полей qf. Используйте этот параметр в качестве обходного пути, если вы обнаружите, что запросы возвращают нулевые попадания из-за неравномерного удаления стоп-слов между полями qf.
Если вы не можете использовать mm.autoRelax
столько, сколько вам нужно mm=100%
, вам нужно будет установить qf
только текстовые поля, которые используют тот же стоп-фильтр (те же параметры и словарь), чтобы гарантировать согласованное поведение, когда запрос содержит стоп-слова.
Комментарии:
1. Нашей проблемой были разные типы полей в
qf
. Одно поле было string (без стоп-фильтра), а другое былоtext_en_splitting_tight
(имело stopfilter, но отсутствовалоenablePositionIncrements=true
) . Приведение fieldtype всех полей к типу с stopfilter с теми же настройками решило проблему.