更新对 Elasticsearch 对象类型字段的限制

Update restrictions on Elasticsearch Object type field

我必须存储包含单个 Json 对象的单个字段的文档。该对象具有可变深度和可变架构。 我配置这样的映射:

"mappings": {
    "properties": {
        "@timestamp": {
            "type": "date"
        },
        "message": {
            "type": "object"
        }
    }
}

它工作正常,Elasticsearch 使用接收到的文档创建和更新映射。 问题是在映射更新后,它拒绝新文档并且不再更新映射。此时我更改了该独立开发者的索引和映射更新。我期待知道正确的解决方案。

例如第一个文档是:

{
    personalInfo:{
        fistName: "tom"
    }
    moviesStatistics: {
        count: 100
    }
}

将更新 Elasticsearch 映射的第二个文档是:

{
    personalInfo:{
        fistName: "tom",
        lastName: "hanks"
    },
    moviesStatistics: {
        count: 100
    },
    education: {
        title: "a title..."
    }
}

Elasticsearch 使用 doc1 创建映射并使用 doc2、doc3 等更新它,直到收到大量文档。之后它开始拒绝所有与最后一个映射字段不匹配的文档。

毕竟我在Elasticsearch的主页上找到了解决方案https://www.elastic.co/guide/en/elasticsearch/reference/7.13//dynamic-field-mapping.html 我们可以使用动态映射并简单地使用这个映射:

"mappings": {
        "dynamic": "true"
}

您还应该更改此处提到的一些默认限制: https://www.elastic.co/guide/en/elasticsearch/reference/7.13//mapping-settings-limit.html