2012-02-09 59 views
0

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

有人知道爲什麼嗎?

回答

1

我猜你看到了這種行爲行爲,因爲你只有爲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> 
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突出,我建議也包括這樣的標準高亮的配置(格式化元素,類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禁用的字段。