使用意外前缀和后缀突出显示Solr

时间:2012-02-09 18:40:02

标签: solr highlighting

我需要自定义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>

有人知道为什么吗?

2 个答案:

答案 0 :(得分:2)

我终于找到了原因!我使用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突出显示哪些字段,我建议还要包含标准突出显示的配置(格式化程序元素,类{{ 1}})像这样:

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> 的字段也是如此。

答案 1 :(得分:1)

我猜你正在看到这种行为行为,因为你只为SimpleFragmentsBuilder定义了前缀和后缀,其他亮点来自另一个片段构建器。

我使用自定义前缀和后缀来突出显示,我在solrconfig.xml的formatter部分的highlighting部分设置了此值,并且没有任何问题,因为它将适用所有片段构建者。

所以可以尝试以下方法:

 <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>