有没有办法配置 Elasticsearch 以防止在特定索引中创建新类型?

Is there a way to configure Elasticsearch so that it will prevent creating new type in specific index?

例如: 我有索引 people 和文档类型 person-info。我通过以下方式明确定义了它的映射:

curl -XPUT 'http://localhost:9200/people/_mapping/person-info' -d '
{
    "person-info" : {
        "properties" : {
            // some mapping
        }
    }
}

有一次我错误地将一些文档插入到 person_info 而不是 person-info。因此,Elasticsearch 自动创建了新的文档类型 person_info,其中包含不适合我们的标准映射。没有关于此的警告,所以我没有注意到我的代码中的错误。所以现在我有很多具有不同映射的文档。

有没有办法配置 Elasticsearch 以防止在特定索引中创建新类型?

不,您不能更改此行为:此字段是必填字段,在添加新文档时用于为其编制索引。如果该字段不存在,Elasticsearch 将不知道如何索引文档。如果缺少该类型的映射,则会创建一个默认映射。

您唯一能做的就是禁用动态映射创建:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-dynamic-mapping.html

是的。您可以通过在 elasticsearch.yml 文件中添加以下行来禁用动态映射。

index.mapper.dynamic: false

现在,如果您尝试索引类型为 person_info 的文档,它将失败。