突出显示包含HTML的字段

时间:2012-08-14 09:00:10

标签: java solr escaping lucene-highlighter

我有一个字段可能包含HTML代码作为用户输入。如果我使用简单的荧光笔,它在添加<em>标记之前不会转义输入。例如。如果输入是

"This is a <caption>"

我搜索&#34;标题&#34;,我得到:

"This is a <<em>caption</em>>"

但我想得到:

"This is a &lt;<em>caption</em>&gt;"

当呈现为HTML时,与匹配单词突出显示的输入相同。

3 个答案:

答案 0 :(得分:3)

一种技巧是使用其他一些标记字符串来指示突出显示。见hl.simple.pre and hl.simple.post。这样你就可以先执行转义,而不会丢失突出显示,然后用突出显示标记替换标记作为最后一步。

例如,Ruby的Sunspot Solr客户端使用@@@hl@@@用于hl.simple.pre参数,@@@endhl@@@用于hl.simple.post参数。使用这些值......

  • Solr返回:This is a <@@@hl@@@caption@@@endhl@@@>
  • HTML转义:This is a &lt;@@@hl@@@caption@@@endhl@@@&gt;
  • 替换哨兵:This is a &lt;<em>caption</em>&gt;

答案 1 :(得分:3)

Solr 4.3.1可以选择为高亮显示启用特定编码器以生成XML / HTML转义片段。把

<str name="hl.encoder">html</str> 

在solrconfig.xml中的/ config / requestHandler [@name =“/ select”] / lst [@ name =“defaults”]下面。该参数也可以通过&amp; hl.encoder = html在url中设置。标准solrconfig.xml包含此编码器的定义

<!-- Configure the standard encoder -->
<encoder name="html" class="solr.highlight.HtmlEncoder" />

示例:“X&lt; Y&lt; Z”将突出显示为

X &lt; <em>Y</em> &lt; Z

搜索“Y”时。 Solr XML响应包含

X &amp;lt; &lt;em&gt;Y&lt;/em&gt; &amp;lt; Z
当然,在str元素中

答案 2 :(得分:0)

您可以使用String.replace将"<<"替换为"&lt;<",将">>"替换为">&gt;"。如果您想要更具体的替换,您也可以指定它们