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

时间:2016-07-21 14:31:44

标签: apache solr lucene highlighting hit-highlighting

我正在尝试使用Apache Solr进行突出显示。在部分匹配的情况下,我想突出显示该单词的匹配部分。但是,整个单词(部分匹配搜索词)会突出显示。

示例:

搜索“adida shi”,其中包含两件商品,一件名为“adidas shirt”,另一件名称为“adidas red shirts”

/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。突出显示正如预期的那样使用solr v4.10.4进行相同的配置。我浏览了以下Solr wiki的部分并尝试了各种突出显示参数,但我无法使其工作:

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

任何想法如何使其发挥作用?

1 个答案:

答案 0 :(得分:0)

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

这个问题很可能是由 EdgeNGramFilterFactory未按预期工作,并在生成令牌时报告错误的偏移量。在过去几个版本的Solr中,这个问题在Jira中已经多次重新开放。

我在生产环境中解决了它luceneMatchVersion =“4.5”(或者NGramFilterFactory为你工作的任何版本。

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