为Text类型字段配置html_strip过滤器后HTML标签未移除问题
问题原因及解决办法
你的配置其实已经生效了——用happy能查到结果,就说明html_strip字符过滤器已经在索引阶段把HTML标签从倒排索引里移除了。你看到_source里还保留HTML标签,核心原因是:
- Elasticsearch的分析器(包括字符过滤器)只负责处理文本生成供查询用的倒排索引,不会修改原始存储的
_source字段。_source存的是你写入时的原始数据,默认不会被分析器改动。
如果想要返回的内容也去掉HTML标签,可以用这几种方式:
- 用高亮功能:查询时添加高亮配置,高亮结果会使用分析后的无标签文本。示例查询:
{ "query": { "match": { "description": "happy" } }, "highlight": { "fields": { "description": {} } } } - 索引前手动预处理:把数据写入Elasticsearch之前,自己先去掉HTML标签。
- 用Ingest Pipeline自动处理:创建一个管道,在索引阶段自动清洗
title和description字段,去掉HTML标签后再存入。示例管道:
后续写入数据时指定这个管道即可。{ "processors": [ { "html_strip": { "field": "title" } }, { "html_strip": { "field": "description" } } ] }
内容的提问来源于stack exchange,提问作者Lina
相关产品推荐
相关产品推荐

