Solr的意想不到的前缀和后缀

问题描述:

我需要定制Solr的突出前缀和后缀这样强调:Solr的意想不到的前缀和后缀

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

,而不是默认

<em>text</em> 

这就是为什么我使用中的这种配置solrconfig.xmlHighlightComponent

<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禁用的字段。