Как выделить только поисковый запрос в Apache Solr?
Я пытаюсь получить правильное выделение, используя Apache Solr. В случае частичного совпадения я хочу выделить совпадающую часть слова. Однако вместо этого выделяется целое слово (которое частично соответствует поисковому запросу).
Пример:
Найдите слово "adida shi", которое должно содержать два элемента: один с именем "adidas shirts", а другой - "adidas red shirts".
/select?q=name:adida+shi&hl=true&hl.fl=name&qt=standardwt=json
Ожидаемое выделение:
<em>adida</em>s <em>shi</em>rts
<em>adida</em>s red <em>shi</em>rts
Актуальная подсветка:
<em>adidas</em> <em>shirts</em>
<em>adidas</em> red <em>shirts</em>
Поле, которое используется для выделения, определяется следующим образом в schema.xml:
<field name="name" type="autocomplete_text" indexed="true" stored="true"/>
Тип поля для поля выглядит следующим образом:
<fieldType name="autocomplete_text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
У меня нет конкретной конфигурации для выделения в файле конфигурации ядра.
Я использую Solr v6.0.1. Подсветка работала, как и ожидалось, с solr v4.10.4 с той же конфигурацией. Я просмотрел следующие разделы Solr wiki и попробовал различные параметры подсветки, но не смог заставить его работать:
https://cwiki.apache.org/confluence/display/solr/Highlighting https://cwiki.apache.org/confluence/display/solr/Standard+Highlighter
Есть идеи, как заставить это работать?
1 ответ
Добавление ответа в качестве продолжения предыдущих комментариев.
Скорее всего, эта проблема вызвана тем, что EdgeNGramFilterFactory не работает должным образом, а вместо этого выдает неправильные смещения при создании токенов. Такая проблема неоднократно открывалась в Jira в последние несколько версий Solr.
Я решил это в производственной настройке luceneMatchVersion="4.5" (или любой другой версии, которая работала для вас, для NGramFilterFactory.
У меня есть это решение в комментарии Jira, но я не могу найти его обратно, поэтому я извиняюсь, но я не могу добавить его в качестве ссылки.