ElasticSearch保存产品报错:总字段数[1000]超出限制求助
Elasticsearch字段数超限问题分析
错误本质
Limit of total fields [1000] has been exceeded这个错误指的是整个索引的mapping中定义的字段总数超过了Elasticsearch默认的1000个限制,和你误以为的“产品总数”完全无关。
为什么第271个产品触发报错
你的那个复合字段大概率是object类型且开启了动态映射:每插入一个产品,如果该复合字段包含了之前没出现过的子字段,Elasticsearch会自动把这些新子字段添加到索引的mapping中。当插入到第271个产品时,累计新增的子字段加上原有字段的总数刚好突破了1000的阈值,触发报错。
移除复合字段后能存上千个产品的原因
移除该复合字段后,剩下的产品字段都是固定结构,不会在mapping中新增任何新字段。不管插入多少个产品,索引的总字段数都是固定的那几个,自然不会触及1000的限制。
解决思路
- 禁用动态映射:针对那个复合字段,设置
"dynamic": false(忽略新增子字段)或"dynamic": "strict"(遇到新子字段直接报错),避免mapping无限制膨胀; - 改用flattened类型:如果需要搜索复合字段的内容,把该字段设为
flattened类型,它会把整个JSON结构作为单一字段存储,不会生成大量子字段; - 调整字段数限制:修改索引的
index.mapping.total_fields.limit参数,增大阈值(不推荐,会降低索引性能)。
内容的提问来源于stack exchange,提问作者P_R
相关产品推荐
相关产品推荐

