Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 突出显示包含HTML的字段_Java_Solr_Escaping_Lucene Highlighter - Fatal编程技术网

Java 突出显示包含HTML的字段

Java 突出显示包含HTML的字段,java,solr,escaping,lucene-highlighter,Java,Solr,Escaping,Lucene Highlighter,我有一个字段,可能包含HTML代码作为用户输入。如果我使用simple highlighter,它在添加标记之前不会退出输入。例如,如果输入是 "This is a <caption>" “这是一个” 当我搜索“标题”时,我得到: “这是一个” 但我想得到: "This is a &lt;<em>caption</em>&gt;" “这是一个标题” 当呈现为HTML时,其外观与突出显示匹配单词的输入相同。您可以使用String.rep

我有一个字段,可能包含HTML代码作为用户输入。如果我使用simple highlighter,它在添加
标记之前不会退出输入。例如,如果输入是

"This is a <caption>"
“这是一个”
当我搜索“标题”时,我得到:

“这是一个”
但我想得到:

"This is a &lt;<em>caption</em>&gt;"
“这是一个标题”

当呈现为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 &lt; <em>Y</em> &lt; Z
X &amp;lt; &lt;em&gt;Y&lt;/em&gt; &amp;lt; Z