我创建了Elasticsearch索引,该索引具有大约350个字段(包括嵌套字段),我只为其中几个定义了映射。 调用_update API时,我收到了400错误请求的异常。
索引[test_index]中的字段总数[1000]已超过限制
我想了解此异常的确切原因,因为我的字段数和为其定义映射的字段数均少于1000。
注意:我启用了嵌套字段和动态映射。
致谢,
桑迪普
答案 0 :(得分:1)
您可以通过增加index.mapping.total_fields.limit(默认值为1000)的值来解决此问题
index.mapping.total_fields.limit
索引中的最大字段数。字段和对象的映射以及字段别名都计入此限制。默认值为1000。
要将字段总数限制增加到2000个,请尝试
PUT test_index/_settings
{
"index.mapping.total_fields.limit": 2000
}
限制字段数的原因是:
在索引中定义太多字段是一种可能导致映射爆炸的情况,这可能会导致内存不足错误和难以恢复的情况。这在动态映射中很常见。每次文档包含新字段时,这些字段都将出现在索引的映射中
相关资源:
1. Get the number of fields on an index
2. Settings to prevent mappings explosion
答案 1 :(得分:1)
解决此问题的另一种方法是在OP似乎正在做的时候仔细设计映射,并通过设置dynamic = false
(甚至是dynamic = strict
)来关闭动态映射
请注意,此方法可以应用于整个映射或其中的其他属性/嵌套对象,这可以提供相当不错的灵活性。
参考文档中的Dynamic mapping