elasticsearch版本:8.7.0
使用kibana操作
创建测试文档
PUT test062506/_doc/1
{
"text": """<ul>
<li>列表项一</li>
<li>列表项二</li>
<li>列表项三</li>
</ul>"""
}
进行高亮查询
POST test062506/_search
{
"query": {
"match": { "text": "<li>列表项一</li>" }
},
"highlight": {
"fields" : {
"text" : {}
}
}
}
返回结果的一部分
"highlight": {
"text": [
"""<ul>
<<em>li</em>><em>列</em><em>表</em><em>项</em><em>一</em></<em>li</em>>
<<em>li</em>><em>列</em><em>表</em><em>项</em>二</<em>li</em>>
<<em>li</em>><em>列</em><em>表</em><em>项</em>三</<em>li</em>>
</ul>"""
]
}
很明显是一个非法的html格式,并且常规方法难以修复。
一个常见的解决方法时创建索引时添加html标签过滤
PUT /test062505
{
"settings": {
"analysis": {
"analyzer": {
"html_analyze": {
"char_filter": [
"my_char_filter"
],
"type": "custom",
"tokenizer": "ik_max_word"
}
},
"char_filter": {
"my_char_filter": {
"escaped_tags": [],
"type": "html_strip"
}
}
}
},
"mappings": {
"properties": {
"text": {
"type": "text",
"analyzer": "html_analyze"
}
}
}
}
PUT test062505/_doc/1
{
"text": """<ul>
<li>列表项一</li>
<li>列表项二</li>
<li>列表项三</li>
</ul>"""
}
POST test062505/_search
{
"query": {
"match": { "text": "<li>列表项一</li>" }
},
"highlight": {
"fields" : {
"text" : {}
}
}
}
返回结果为
"highlight": {
"text": [
"""<ul>
<li><em>列表项</em><em>一</em></li>
<li><em>列表项</em>二</li>
<li><em>列表项</em>三</li>
</ul>"""
]
}
相关文档地址: analysis-charfilters.html