【问题标题】:How can I highlight only the search term in Apache Solr?如何仅突出显示 Apache Solr 中的搜索词?
【发布时间】:2016-11-25 05:07:19
【问题描述】:

我正在尝试使用 Apache Solr 正确突出显示。在部分匹配的情况下,我想突出显示匹配的部分单词。然而,整个单词(部分匹配搜索词)被突出显示。

示例:

搜索“adida shi”,应该会得到两项,一项名为“adidas shirts”,另一项名为“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

任何想法如何使它工作?

【问题讨论】:

  • 我认为可能是因为您使用了自动完成归档类型。它必须只突出显示阿迪达和施。更改字段定义并尝试
  • EdgeNGramFilterFactory 是否按预期工作?过去我遇到过同样的问题,并验证它在生成令牌时报告了不正确的偏移量。我检查了 Jira,问题不断关闭并重新打开。
  • 你是对的@AR1。似乎 EdgeNGramFilter 没有按预期工作 - 即正如您所说,它在生成令牌时报告了不正确的偏移量。此行为更改是通过以下票证的补丁引入的:issues.apache.org/jira/browse/LUCENE-3907。
  • 似乎有人在用户组中提出了同样的问题,但无法得到答案:signaldump.org/solr/qpod/28142/…。建议使用 EdgeNGramFilterFactory 以外的其他过滤器来实现我期望的行为?
  • 我在答案中添加了该问题的解决方法。如果您对它感到满意,请接受它。

标签: apache solr lucene highlighting hit-highlighting


【解决方案1】:

添加答案作为对先前 cmets 的跟进。

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

我在生产设置 luceneMatchVersion="4.5" (或任何适合您的版本,用于 NGramFilterFactory。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
相关资源
最近更新 更多