Я пытаюсь выделить точный поисковый термин из запроса, но выделенный термин возвращается как самый короткий токен из моего поля токенов.Например, запрос «Entr» приведет к выделению Ent ry.Мне бы хотелось, чтобы подсветка возвращала Entr y
Это самый простой запрос, который соответствует каждому экземпляру термина в ответе: q = Title_Tokens: Entr & hl = on & hl.fl = Title_Tokens & hl.useFastVectorHighlighter = true
Удаление FastVectorHighlighter дает весь термин, но только один раз для каждого результата, а в некоторых случаях он не совпадает.
Я пытался добавить в hl.q,hl.highlightingMultiTerm, hl.usePhraseHighlighter и несколько других переменных, но я могу получить только каждый экземпляр самого короткого токена или первый экземпляр поискового запроса.
Поле, которое я пытаюсь выделить, - это Title_Tokens, который копируется из строки.
<field name="RawTitle" type="string" required="true" />
<field name="Title_Tokens" type="Tokenized_Title" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/>
<copyField source="RawTitle" dest="Title_Tokens" />
<fieldType name="Tokenized_Title" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" maxGramSize="15" minGramSize="3"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
При анализе моего поля на предмет "entr" я вижу токены для "ent, entr и ntr".Для меня это выглядит так, как будто первый токен для сопоставления выделен, но я хочу расставить приоритеты для самого длинного совпадения.Это то, что происходит, или я делаю что-то еще неправильно?
Я также подумал об использовании EdgeNGramTokenizerFactory для сопоставления с конца слова, но это остановит совпадения в середине слова.