Elasticsearch插入文档报failed to parse field of type [text]错误如何解决
问题原因
- 索引模板中配置的动态模板规则匹配路径
alert.*下的所有字段,强制将这类字段映射为text类型 - 待写入文档中
alert.something为对象结构,无法被ES解析为text类型的文本内容,触发类型解析失败报错 - 索引模板的全局配置中
ignore_malformed参数设置为false,类型不匹配时会直接拒绝文档写入,不会忽略异常字段
解决方案
以下三种方案可根据实际业务场景选择:
方案1:调整动态模板规则
修改动态模板,仅对基础类型的alert下字段做text类型映射,对象类型走自动映射逻辑,示例配置如下:
"dynamic_templates": [ { "alert_fields": { "path_match": "alert.*", "match_mapping_type" : ["string", "boolean", "long", "double"], "mapping": { "type": "text" } } } ]
如果需要alert下所有层级的嵌套基础字段都映射为text,可将path_match调整为alert.**。
方案2:显式声明特殊字段类型
提前在索引模板的properties中声明alert.something的类型为object,显式声明的字段优先级高于动态模板规则,示例配置如下:
"properties" : { "application" : { "index" : "false", "store" : true, "type" : "text" }, "alert.something": { "type": "object" } }
方案3:开启异常字段忽略(不推荐)
将索引设置中的ignore_malformed调整为true,写入时类型不匹配的字段会被自动忽略,不会阻断整个文档的写入,但异常字段无法被检索。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

