Elasticsearch具有内置的“突出显示”功能,该功能可让您在结果中标记匹配的词(比起初听起来更复杂,因为查询语法可能包含接近匹配等)。
我有HTML字段,当我打开突出显示功能时,Elasticsearch会遍历整个HTML语法。
以这种方式突出显示时,是否可以使其支持HTML / HTML安全?
我希望突出显示应用于HTML文档中的文本,而不是突出显示与搜索匹配的任何HTML标记,即搜索“ p”可能会突出显示<p>p</p>
->
<p><mark>p</mark></p>
。
我的字段被索引为“ type: string
”。
该文件说:
编码器:
编码器参数可用于定义突出显示的文本的编码方式。它可以是默认值(无编码)或html(如果使用html突出显示标签,则将转义html)。
..但HTML转义了我本来已经HTML编码的字段,使事情变得更糟。
这是两个示例查询
高亮标签插入其他标签内,即<p>
-> <<tag1>p</tag1>>
:
curl -XPOST -H 'Content-type: application/json' "http://localhost:7200/myindex/_search?pretty" -d '
{
"query": { "match": { "preview_html": "p" } },
"highlight": {
"pre_tags" : ["<tag1>"],
"post_tags" : ["</tag1>"],
"encoder": "default",
"fields": {
"preview_html" : {}
}
},
"from" : 22, "size" : 1
}'
GIVES:
...
"highlight" : {
"preview_html" : [ "<<tag1>p</tag1> class=\"text\">TOP STORIES</<tag1>p</tag1>><<tag1>p</tag1> class=\"text\">Middle East</<tag1>p</tag1>><<tag1>p</tag1> class=\"text\">Syria: Developments in Syria are main story in Middle East</<tag1>p</tag1>>" ]
}
...
html
编码器:Elasticsearch对现有的HTML语法进行了转义,从而破坏了工作,即<p>
-> <<tag1>p</tag1>>
:
curl -XPOST -H 'Content-type: application/json' "http://localhost:7200/myindex/_search?pretty" -d '
{
"query": { "match": { "preview_html": "p" } },
"highlight": {
"pre_tags" : ["<tag1>"],
"post_tags" : ["</tag1>"],
"encoder": "html",
"fields": {
"preview_html" : {}
}
},
"from" : 22, "size" : 1
}'
GIVES:
...
"highlight" : {
"preview_html" : [ "<<tag1>p</tag1> class="text">TOP STORIES</<tag1>p</tag1>><<tag1>p</tag1> class="text">Middle East</<tag1>p</tag1>><<tag1>p</tag1> class="text">Syria: Developments in Syria are main story in Middle East</<tag1>p</tag1>>" ]
}
}
...
实现此目的的一种方法是在分析字段时使用html_strip
char过滤器preview_html
。
这样可以确保while匹配不会在html标记上发生,因此突出显示将忽略它,如下面的示例所示。
例:
put test
{
"settings": {
"index": {
"analysis": {
"char_filter": {
"my_html": {
"type": "html_strip"
}
},
"analyzer": {
"my_html": {
"tokenizer": "standard",
"char_filter": [
"my_html"
],
"type": "custom"
}
}
}
}
}
}
put test/test/_mapping
{
"properties": {
"preview_html": {
"type": "string",
"analyzer": "my_html",
"search_analyzer": "standard"
}
}
}
put test/test/1
{
"preview_html": "<p> p </p>"
}
post test/test/_search
{
"query": {
"match": {
"preview_html": "p"
}
},
"highlight": {
"fields": {
"preview_html": {}
}
}
}
"hits": [
{
"_index": "test",
"_type": "test",
"_id": "1",
"_score": 0.30685282,
"_source": {
"preview_html": "<p> p </p>"
},
"highlight": {
"preview_html": [
"<p> <em>p</em> </p>"
]
}
}
]
我最近通过从源代码编译在CentOS机器上安装了Python 2.7.3。Python 2.7.3安装在/opt/python2.7上,当我安装它时,我只需更改/usr/bin/Python以指向新版本。这显然是错误的,因为当我这样做的时候,它打破了百胜。我会得到以下内容。 我更改了/usr/bin/python以指向python 2.6.6,但现在2.6.6是python的默认版本。你知道怎么解
问题内容: Eclipse不会为我突出显示匹配的变量: 我已经尝试通过更改“标记出现次数” 但这没用。我不确定在其他人已经能够解决此问题的同时,为什么这不起作用。 谁能告诉我如何设置突出显示的匹配变量? 用我的眼睛寻找相同的变量真的让我非常困扰。 问题答案: 尝试: 选择所有可用的选项。 也请前往: 比较“发生次数”和“写入发生次数”的设置 确保您没有选中其中之一的“文本显示为高亮显示”选项。 这
假设我有两个类叫做ad。 它们都实现了。 对于只有两种方法,分别称为和。 一切都很好。但是,虽然这似乎很好地利用了s,但我认为如果我需要向这个添加方法,实现就会中断,即我需要去实现这些类中的新方法,这打破了“封闭-开放原则”。 所以我想,除了,如果将来需要添加新方法,我还会使用类。 例如,。 这听起来是个好计划(如果不是,请纠正我)。 但问题是,如果这些类已经有其他类了怎么办?在这种情况下,我不能
为了记录请求和响应,我添加了一个LoggingRequestInterceptor,它实现了ClientHTTPPrequestinterceptor。。。 响应主体是一个流,如果我将其读取到我的拦截器中,TestRestTemplate将无法将其反序列化到我的对象模型中。换句话说,当我调用testRestTemplate时。获取…我将始终获取空对象(即使我看到对象我的响应)。 要解决RestTe
本文向大家介绍Linux中在不破坏磁盘的情况下使用dd命令,包括了Linux中在不破坏磁盘的情况下使用dd命令的使用技巧和注意事项,需要的朋友参考一下 无论你试图从即将坏掉的存储驱动器抢救数据,将归档备份到远程存储,还是在别处对活动分区制作一份完美副本,都要知道如何安全可靠地复制驱动器和文件系统。幸好,有dd这款简单而强大的镜像复制工具,而且历史悠久。在这方面没有比它更出色的工具了。 dd命令的解
问题内容: 我有各种HTML字符串可以切成100个字符(已剥离内容的内容,而不是原始内容),而不剥离标签且不破坏HTML。 原始HTML字符串 (288个字符): 标准修剪: 修剪至100个字符和HTML中断,剥离的内容约40个字符: 剥离的HTML: 输出正确的字符数,但显然失去了格式设置: 局部解决方案: 使用HTML Tidy或Purifier关闭标签可输出干净的HTML,但100个字符的H