文章目录
背景
Elasticsearch映射如果不进行特殊设置,则默认为dynamic:true
。dynamic:true
实际上支持不加约束地动态添加字段。这样对某些日志场景,可能会产生大量的未知字段。字段如果持续激增,就会达到Elasticsearch映射层面的默认上限,对应设置和默认大小为index. mapping.total_fields.limit:1000
。我们把这种非预期字段激增的现象称为字段膨胀。
Flattened类型的产生
如前分析,将dynamic设置为false或者strict不是普适的解决方案。例如,在日志场景中,虽然期望动态添加字段,但strict过于严格会导致新字段数据拒绝写入,而dynamic:true
过于松散会导致字段膨胀。这就导致同时满足上述两个方面的Flattened字段的诞生。
Flattened类型最早发布于Elasticsearch 7.3这一版本。
一句话来说,Flattened字段就是用来解决字段膨胀问题的。
Flattened类型的定义
PUT my_index_0517
{
"mappings": {
"properties": {
"host": {
"type": "flattened"
}
}
}
}
Flattened的本质是将原来一个复杂的Object或者Nested嵌套多字段类型统一映射为扁平的单字段类型。这里要强调的是:不管原来内嵌多少个字段、内嵌多少层,利用Flattened类型都能一下“拉平”
基于Flattened类型插入数据
基于上面所说的映射