如何设置elasticsearch www.example.com _fields.limit为无限

f3temu5u  于 2023-04-29  发布在  ElasticSearch
关注(0)|答案(2)|浏览(145)

我正在处理一个巨大的json blob,所以我需要打开seal。如何将elasticsearch index.mapping.total_fields.limit设置为无限制?

chhkpiq4

chhkpiq41#

您不能将其设置为无限制。事实上,它已经被有意地限制,以防止Map爆炸。你可以在这里阅读github issue
唯一能达到你想要的就是使用高值。
您可以在创建索引时指定该值:

PUT test
{
  "shopfront": {
    "index.mapping.total_fields.limit": 2000,
    "number_of_shards": 5,
    "number_of_replicas": 2
  },
  "mappings": {
    ...
  }
}

或者如果是针对现有索引:

PUT shopfront/_settings
{
  "index.mapping.total_fields.limit": 2000
}
z18hc3ub

z18hc3ub2#

我不认为当前实现允许您将此值设置为unlimited。
正如您可能知道的,默认值已经很高了(1000),如official docs中所述。
如果你检查源代码,你会发现当前的实现不允许无限(例如设置为-1),你可以在下面的代码片段中看到from official elasticsearch source code

private void checkTotalFieldsLimit(long totalMappers) {
    long allowedTotalFields = indexSettings.getValue(INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING);
    if (allowedTotalFields < totalMappers) {
        throw new IllegalArgumentException("Limit of total fields [" + allowedTotalFields + "] in index [" + index().getName() + "] has been exceeded");
    }
}

我认为最好的选择是在Map索引时将其设置为一个非常高的值,并检查开销是否适合您的用例。

相关问题