“已超出索引 [] 中的总字段数 [1000] 的限制”在 Elasticsearch 中是什么意思

SSG*_*SSG 29 elasticsearch

我创建了 Elasticsearch 索引,它有大约 350 个字段(包括嵌套字段),我只为其中的几个定义了映射。在调用 _update API 时,我遇到了 400 Bad request 的异常。

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

问候,
桑迪普

Ash*_*lam 47

您可以通过增加 index.mapping.total_fields.limit(默认 1000)的值来解决此问题

index.mapping.total_fields.limit

索引中的最大字段数。字段和对象映射以及字段别名计入此限制。默认值为 1000。

要将总字段限制增加到 2000,试试这个

PUT test_index/_settings
{
  "index.mapping.total_fields.limit": 2000
}
Run Code Online (Sandbox Code Playgroud)

限制字段​​数的原因是:

在索引中定义太多字段会导致映射爆炸,从而导致内存不足错误和难以恢复的情况。这在动态映射中很常见。每次文档包含新字段时,这些字段都会在索引的映射中结束

相关资源:
1.获取索引上的字段数
2.防止映射爆炸的设置

  • @SSG也许您正在尝试索引包含超过 72 个新字段的新文档 (3认同)

Mar*_*rco 12

我通过谷歌登陆这里。这对我有用(来自外壳):

curl -s -XPUT http://localhost:9200/test-index/_settings  -H 'Content-Type: application/json' -d '{"index.mapping.total_fields.limit": 2000}'
Run Code Online (Sandbox Code Playgroud)


ela*_*ell 5

dynamic = false处理这个问题的另一种方法是仔细设计映射,就像OP似乎正在做的那样,并通过设置(甚至dynamic = strict)来关闭动态映射

请注意,这种方法可以应用于整个映射或其中的其他属性/嵌套对象,这可以实现相当程度的灵活性。

参考文档中的动态映射