Solr突出显示了意外的前缀和后缀



我需要自定义Solr突出显示前缀和后缀,如下所示:

<span class="highlight">text</span>

而不是默认的

<em>text</em>

这就是为什么我在solrconfig.xml中为HighlightComponent:使用此配置

<searchComponent class="solr.HighlightComponent" name="highlight">
    <highlighting>
        <fragmentsBuilder name="simple" default="true" class="solr.highlight.SimpleFragmentsBuilder">
            <lst name="defaults">
                <str name="hl.tag.pre"><![CDATA[<span class="highlight">]]></str>
                <str name="hl.tag.post"><![CDATA[</span>]]></str>
            </lst>
        </fragmentsBuilder>
    </highlighting>
</searchComponent>

以下是我的标准请求处理程序的默认参数:

<requestHandler name="standard" class="solr.SearchHandler" default="true">
    <lst name="defaults">
        <str name="hl">true</str>
        <str name="hl.fl">body,title</str>
        <str name="hl.useFastVectorHighlighter">true</str>
    </lst>
</requestHandler>

当我搜索text单词时,我确实会突出显示文本单词,但并不总是使用我配置的前缀和后缀:

<lst name="highlighting">
    <lst name="document_1">
        <arr name="body">
            <str>my <em>text</em> highlighted</str>
        </arr>
        <arr name="title">
            <str>my <span class="highlight">text</span> highlighted</str>
        </arr>
    </lst>
</lst>

有人知道为什么吗?

我猜您看到了这种行为,因为您只为SimpleFragmentsBuilder定义了前缀和后缀,而其他亮点来自另一个片段生成器。

我使用自定义前缀和后缀进行高亮显示,并在solrconfig.xml的highlighting部分的formatter部分中设置了该值,没有遇到任何问题,因为它将适用于所有片段构建器。

因此,也许可以尝试以下方法:

 <highlighting>
   <fragmentsBuilder name="simple" default="true"
          class="solr.highlight.SimpleFragmentsBuilder"/>
   <!-- Configure the standard formatter -->
   <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter"
        default="true">
     <lst name="defaults">
       <str name="hl.simple.pre"><![CDATA[<span class="highlight">]]></str>
       <str name="hl.simple.post"><![CDATA[</span>]]></str>
     </lst>
  </formatter>
 </highlighting>

我终于找到了原因!我正在使用fastVectorHighlighter使高亮显示更快。一开始,我只强调title字段,一切都很好。当我将body字段添加到高亮显示时,我忘记启用termVectors=true。现在我的body字段看起来像这个

<field name="body" type="text" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />

在一个完整的重新索引突出显示是完美工作后:

<lst name="highlighting">
    <lst name="document_1">
        <arr name="body">
            <str>my <span class="highlight">text</span> highlighted</str>
        </arr>
        <arr name="title">
            <str>my <span class="highlight">text</span> highlighted</str>
        </arr>
    </lst>
</lst>

以前,正文字段高亮显示确实有效,但没有fastVectorHighlighter,因为该字段没有termVectors=true参数。这就是为什么我使用默认前缀和后缀突出显示body的原因。由于fastVectorHighlighter是一种完全不同的高亮显示方法,因此配置也不同。

为了避免这种错误,只要用户可以选择用hl.fl parameter突出显示哪些字段,我建议还包括标准突出显示(格式化程序元素,类solr.highlight.HtmlFormatter)的配置,如下所示:

<searchComponent class="solr.HighlightComponent" name="highlight">
    <highlighting>
        <formatter name="html" default="true" class="solr.highlight.HtmlFormatter">
            <lst name="defaults">
                <str name="hl.simple.pre"><![CDATA[<span class="highlight">]]></str>
                <str name="hl.simple.post"><![CDATA[</span>]]></str>
            </lst>
        </formatter>
        <fragmentsBuilder name="simple" default="true" class="solr.highlight.SimpleFragmentsBuilder">
            <lst name="defaults">
                <str name="hl.tag.pre"><![CDATA[<span class="highlight">]]></str>
                <str name="hl.tag.post"><![CDATA[</span>]]></str>
            </lst>
        </fragmentsBuilder>
    </highlighting>
</searchComponent>

这种方式高亮显示将使用相同的前缀和后缀,即使对于禁用termVectors的字段也是如此。

最新更新