无法在索引上设置 index.mapping.single_type: true

Not able to set index.mapping.single_type: true on an index

我有一个只有单一类型的索引。现在,我计划启用 "index.mapping.single_type" 并触发了以下 API 来实现它,但出现了以下错误。

顺便说一句,我在应用上述 API.

之前关闭了索引

语法有问题还是不允许.

PUT testindex1/_settings
{
"settings": {
"index.mapping.single_type": true
}
}

{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "final testindex1 setting [index.mapping.single_type], not updateable"
}
],
"type": "illegal_argument_exception",
"reason": "final testindex1 setting [index.mapping.single_type], not updateable"
},
"status": 400
}

有些设置即使在索引关闭时也无法动态更新,index.number_of_shards 也是一种这样的设置,它们称为 final 设置,您的 index.mapping.single_type 也是 final 设置,甚至在您的错误消息中也提到了,我将设置的 final 部分加粗以区分它。

final testindex1 setting [index.mapping.single_type], not updateable

使用 Elasticsearch 源代码可以更好地理解它。 class org.elasticsearch.common.settings.Setting 定义设置的类型,请参阅下面对 final 设置的解释。

/** * mark this setting as final, not updateable even when the context is not dynamic * ie. Setting this property on an index scoped setting will fail update when the index is closed */ Final,

您可以在 Elasticsearch 中检查 this line 上面的代码,它解释了更多,下面的代码显示了这个 final 类型用于创建 number of primary shard 设置。

Setting.intSetting(SETTING_NUMBER_OF_SHARDS, 1, 1, maxNumShards, Property.IndexScope, Property.Final);

我希望你明白,现在是错误的原因,看起来你必须重新索引新设置的数据。