如何突出显示最长的Solr令牌

时间:2019-04-18 16:16:26

标签: solr solr-highlight

我正在尝试突出显示查询中的确切搜索词,但是突出显示的词作为我的标记化字段中最短的标记返回。例如,查询“ 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从单词的后面进行匹配,但这会停止单词中间的匹配。

1 个答案:

答案 0 :(得分:0)

该字段需要查询。索引器工作正常,但它在所有内容上都匹配,并返回第一个匹配的标记。与查询分析器结合使用时,只会匹配最长的结果。

<fieldType name="Tokenized_Title" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="15" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>