如何将elasticsearch index.mapping.total_fields.limit设置为无限

时间:2017-03-31 09:14:15

标签: elasticsearch

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

2 个答案:

答案 0 :(得分:3)

您无法将其设置为无限制。实际上,它有意限制为防止映射爆炸。您可以在此处阅读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
}

答案 1 :(得分:0)

我认为当前的实现不允许您将此值设置为无限制。

您可能知道默认值已经很高(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");
    }
}

我认为您最好的选择是在映射索引时将其设置为非常高的值,并检查开销是否可以用于您的用例。