在Elasticsearch

时间:2019-03-27 08:03:00

标签: elasticsearch

我创建了Elasticsearch索引,该索引具有大约350个字段(包括嵌套字段),我只为其中几个定义了映射。 调用_update API时,我收到了400错误请求的异常。

索引[test_index]中的字段总数[1000]已超过限制
我想了解此异常的确切原因,因为我的字段数和为其定义映射的字段数均少于1000。
注意:我启用了嵌套字段和动态映射。

致谢,
桑迪普

2 个答案:

答案 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