Solr: выделение разрывов

Я изменил некоторые из моих полей с text_general в text_enв надежде воспользоваться преимуществами стемминга и некоторых других улучшений, но, к сожалению, изменение не дало результата. Кажется, что он хочет только выделить неосновные слова (т. Е. Слова, чья основанная на слове версия совпадает с самим словом, например "ребенок").

Я использую определение fieldType по умолчанию:

 <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
     <tokenizer class="solr.StandardTokenizerFactory"/>
     <filter class="solr.StopFilterFactory"
             ignoreCase="true"
             words="lang/stopwords_en.txt"
             />
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.EnglishPossessiveFilterFactory"/>
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
     <filter class="solr.PorterStemFilterFactory"/>
   </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.StandardTokenizerFactory"/>
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
     <filter class="solr.StopFilterFactory"
             ignoreCase="true"
             words="lang/stopwords_en.txt"
             />
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.EnglishPossessiveFilterFactory"/>
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
     <filter class="solr.PorterStemFilterFactory"/>
   </analyzer>
 </fieldType>

И включение подсветки с hl.fl=title&hl=true в моем запросе. Это также граненый поиск, если это имеет значение.

В этом случае, как я уже сказал, выделяются только такие слова без слов, как "ребенок". Если я удаляю стволовый фильтр из анализатора индекса (только анализатор запросов, кажется, не имеет никакого эффекта) в text_en определение, все совпадающие слова, кроме стоп-слов, подсвечиваются. Кроме того, если я изменю text_en использовать EnglishMinimalStemFilterFactoryбольше слов выделено, что, я полагаю, связано с тем, что они основаны на портере Портера, а не на этом. Примером такого слова являются "шаги".

Кто-нибудь знает, что происходит?

1 ответ

Я знаю, что этот вопрос мертв, но для любого, кто читает это здесь, мое решение.

Во-первых, обратите внимание, что это происходит только в том случае, если вы используете "hlq". Если вы используете "q" в качестве подсвечивающего запроса, а также поискового запроса, все должно быть хорошо. Но если это не то, что вам нужно для вашего приложения, вы можете сделать это:

В вашей цепочке анализатора, для индексации и запроса, добавьте это:

<!-- will keep both the stemmed and unstemmed versions from any stemmer -->

<filter class="solr.KeywordRepeatFilterFactory" />

<!-- put your stemmer here, something like: -->

<filter class="solr.SnowballPorterFilterFactory"/>

<!-- if unstemmed == stemmed, only keep one -->

<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

По сути, это сохранит все слова в стебельной и несимметричной версии, а затем удалит дубликаты. Теперь выделение будет совпадать с документами (оно все равно будет соответствовать только фразе EXACT, введенной как hlq, хотя q будет сопоставлять что-либо с таким же основанием, так что все еще могут быть некоторые документы, возвращаемые q, которые имеют пустое поле выделения)

Другие вопросы по тегам