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, которые имеют пустое поле выделения)