我需要自定义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>
有人知道为什么吗?
答案 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>