如何在Apache Solr中仅突出显示搜索词?

人气:307 发布:2022-10-16 标签: apache lucene solr highlighting hit-highlighting

问题描述

我正在尝试使用ApacheSolr正确地突出显示。在部分匹配的情况下,我想突出显示单词的匹配部分。但是,整个单词(部分匹配搜索词)会被高亮显示。

示例:

搜索"Adida Shih",应该会出现两个项目,一个名称为"ADIDAS衬衫",另一个名称为"ADIDAS红衫"

/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。在具有相同配置的Solrv4.10.4中,突出显示效果与预期一致。我浏览了Solr维基的以下部分,并尝试了各种突出显示参数,但都无法正常工作:

https://cwiki.apache.org/confluence/display/solr/Highlighting https://cwiki.apache.org/confluence/display/solr/Standard+Highlighter

有什么办法让它工作吗?

推荐答案

添加答案作为先前评论的后续内容。

该问题很可能是由 EdgeNGramFilterFactory没有按预期工作,而是在生成令牌时报告不正确的偏移量。在过去的几个Solr版本中,此类问题已在Jira中多次重新出现。

我在生产设置LuceneMatchVersion="4.5"中解决了它(或为NGramFilterFactory工作的任何版本)。

我在Jira评论中得到了这个解决方案,但我找不到它,所以我很抱歉,但我无法将其添加为参考。

284