【问题标题】:Solr highlighting with unexpected prefix and suffix带有意外前缀和后缀的 Solr 突出显示
【发布时间】:2012-03-02 06:32:05
【问题描述】:

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

有人知道为什么吗?

【问题讨论】:

    标签: solr highlighting


    【解决方案1】:

    我终于知道原因了!我正在使用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>
    

    以前,body 字段突出显示确实有效,但没有 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 的字段,这种突出显示方式也可以使用相同的前缀和后缀。

    【讨论】:

      【解决方案2】:

      我猜您会看到这种行为,因为您只有为 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-05
        • 1970-01-01
        相关资源
        最近更新 更多