Java 突出显示包含HTML的字段
我有一个字段,可能包含HTML代码作为用户输入。如果我使用simple highlighter,它在添加Java 突出显示包含HTML的字段,java,solr,escaping,lucene-highlighter,Java,Solr,Escaping,Lucene Highlighter,我有一个字段,可能包含HTML代码作为用户输入。如果我使用simple highlighter,它在添加标记之前不会退出输入。例如,如果输入是 "This is a <caption>" “这是一个” 当我搜索“标题”时,我得到: “这是一个” 但我想得到: "This is a <<em>caption</em>>" “这是一个标题” 当呈现为HTML时,其外观与突出显示匹配单词的输入相同。您可以使用String.rep
标记之前不会退出输入。例如,如果输入是
"This is a <caption>"
“这是一个”
当我搜索“标题”时,我得到:
“这是一个”
但我想得到:
"This is a <<em>caption</em>>"
“这是一个标题”
当呈现为HTML时,其外观与突出显示匹配单词的输入相同。您可以使用String.replace将
“>”
替换为“>”
。如果您想要任何更具体的替换,您也可以指定它们一种技术是使用其他一些sentinel字符串来指示高亮显示。看见这样,您可以先执行转义,而不会丢失高亮显示,然后用高亮显示标记替换哨兵,作为最后一步
例如,Ruby的Sunspot Solr客户端对hl.simple.pre
参数使用@@@hl@@@code>,对hl.simple.post
参数使用@@@endhl@@@code>。使用这些值
- Solr返回:
这是一个
- HTML转义:
这是一个@@@hl@@@caption@@@endhl@@
- 替换哨兵:
这是一个标题
Solr 4.3.1提供了一个选项,可以启用特定的编码器来生成XML/HTML转义片段。放
<str name="hl.encoder">html</str>
当然,在str元素中。我认为最好的方法是对那些转义的字符进行索引。Solr如何知道它们是标记并逃避它们?我的意思是,你在索引,如果我搜索“lt”
?这只是一个变通办法,不是解决方案。更好的解决方法是让solr用非html的东西(比如“2*@(4)m@”)包围匹配项,然后转义并替换为。但我想要一个真正的解决方案,我认为它是存在的,但它只是不适合我,否则我会认为它是一个bug:你通常不应该添加HTML标签到未逃避的输入……在你的索引和你存储的东西之间有一个区别。您应该查看索引部分的。如果您向Solr发送转义字符,则它们将以这种方式存储、显示和突出显示。但是,如果使用该工厂,则应使用相关字符替换索引中的命名实体,但不确定
和
是否正确。试试看,让我知道进展如何!这仅适用于此特定情况。如果输入是“这是一个标题错误的脚本”
?我就是这么做的,但我认为这只是我的配置错误。在示例服务器中的searchComponent
中有
,我认为必须以某种方式启用它。。。如果用户在输入中输入@@@hl@@
,他将破坏xml的良好格式,因为它将生成未编码的标记。我认为这是一个错误,如果它不能做得更好。
<str name="hl.encoder">html</str>
<!-- Configure the standard encoder -->
<encoder name="html" class="solr.highlight.HtmlEncoder" />
X < <em>Y</em> < Z
X &lt; <em>Y</em> &lt; Z