Solr – Настройте морской компонент SeachHandler с минимальным совпадением = 100% и по-прежнему игнорируйте стоп-слова из поискового запроса

#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 с теми же настройками решило проблему.