Open zhixiao opened 7 years ago
@medcl 借楼请教个类似的问题,我用 logstash-jdbc-input 从 MySQL 导入 HTML 到 Elasticsearch,Elasticsearch 和 Logstash 版本号都是 5.4.1,索引设置如下:
{
"settings": {
"analysis": {
"analyzer": {
"ik_html_strip": {
"type": "custom",
"tokenizer": "ik_smart",
"char_filter": ["html_strip"]
}
}
}
},
"mappings": {
"articles": {
"_all": {
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"term_vector": "no",
"store": "false"
},
"properties": {
"content": {
"type": "text",
"analyzer": "ik_html_strip",
"search_analyzer": "ik_html_strip",
"include_in_all": "false",
"boost": 8
},
"title": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"include_in_all": "true",
"boost": 8
}
}
}
}
}
请求如下:
{
"query": {
"multi_match": {
"query": "中国",
"fields": [
"title",
"content"
]
}
},
"highlight": {
"pre_tags": [
"<tag1>"
],
"post_tags": [
"</tag1>"
],
"fields": {
"content": {
},
"title": {
}
}
}
}
搜索结果中的 content 并没有过滤掉 HTML 标签(只贴出了 highlight 部分):
{
"highlight": {
"title": [
"分享:弘扬<tag1>中国</tag1>精神的优秀原创歌曲《一样的<tag1>中国</tag1>梦》"
],
"content": [
"人民为中心的创作导向,聚焦<tag1>中国</tag1>梦的时代主题,传承中华民族传统文化,弘扬爱国主义精神曲,</span><span>本曲已在酷狗、 QQ",
"音乐等可以下载,全民K歌、全国KTV上线,欢迎点唱,支持闽南小中原创。</span></p><p><span>歌名:<span>《一样的<tag1>中国</tag1>梦",
"爱家乡</span></p><p><span>文明<tag1>中国</tag1>梦和谐的天堂</span></p><p><span>我的<tag1>中国</tag1>梦也和你一样</span></p><p><span>复兴<tag1>中国</tag1>梦民富国又强</span>",
"</p><p><span>一样的<tag1>中国</tag1>梦充满着希望</span>"
]
}
}
恳请指点一下是哪里的问题,谢谢。
上面贴的连接已经解答了,analyzer只作用于索引,对原始的source不做操作。
不好意思,还是不太明白,我的理解是,搜索结果的 highlight 应该是 search_analyzer 作用之后的结果,这里用了 ik_html_strip,那么 ik_smart 和 html_strip 都应该有效果的,实际上却只有 ik_smart 有效果,烦请您再解释一下。
hightlight的数据源是_source,也就是索引的json数据,而不是analysis的数据。
@medcl 那是不是使用ik_html_strip
分词后的token不会包含html标签?没有看到ik_html_strip
相关的文档,所以请教一下,谢谢
@fudali113 是的,analysis 的结果不包括的,你可以使用 analyze 接口测试的。
我的配置文件是这样的,现在想在索引数据的时候将html过滤掉,但是使用这种配置方式进行数据索引之后,查看数据html标签依然存在,不解! { "settings":{ "analysis":{ "analyzer": { "ik_max_word": { "type": "ik", "use_smart": false }, "ik_html_strip": { "char_filter": [ "html_strip" ], "type": "custom", "tokenizer": "ik", "use_smart": false }, "html_strip": { "char_filter": [ "html_strip" ], "tokenizer": "standard" } } }
}