如何突出显示最长的 solr 令牌
How to highlight the longest solr token
我试图突出显示查询中的确切搜索词,但突出显示的词作为我的标记化字段中的最短标记返回。例如,"Entr" 的查询将导致突出显示 Ent ry。我想要突出显示 return 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, and ntr" 的标记。在我看来,第一个要匹配的标记被突出显示,但我想优先考虑最长的匹配项。这是怎么回事,还是我做错了什么?
我也考虑过使用 EdgeNGramTokenizerFactory 从单词的后面匹配,但是那样会在单词的中间停止匹配。
该字段需要查询。索引器工作正常,但它匹配所有内容并返回第一个匹配的标记。结合查询分析器,只匹配最长的结果
<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>
我试图突出显示查询中的确切搜索词,但突出显示的词作为我的标记化字段中的最短标记返回。例如,"Entr" 的查询将导致突出显示 Ent ry。我想要突出显示 return 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, and ntr" 的标记。在我看来,第一个要匹配的标记被突出显示,但我想优先考虑最长的匹配项。这是怎么回事,还是我做错了什么?
我也考虑过使用 EdgeNGramTokenizerFactory 从单词的后面匹配,但是那样会在单词的中间停止匹配。
该字段需要查询。索引器工作正常,但它匹配所有内容并返回第一个匹配的标记。结合查询分析器,只匹配最长的结果
<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>