我试图突出显示查询中的确切搜索词,但突出显示的词作为我标记化字段中最短的标记返回。例如,查询“Entr”将导致突出显示Entr。我希望高亮返回Entry
这是匹配答案中每个术语实例的最简单查询: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 从单词的后面进行匹配,但这会在单词的中间停止匹配。