如何为Elasticsearch中的字段定义动态模板映射,同时保持其他字段的严格动态设置?

时间:2014-08-07 14:01:25

标签: templates dynamic elasticsearch mapping

我想在Elasticsearch中为字段创建动态映射,但是在执行此操作时遇到了麻烦,同时通过使用“严格”动态设置来限制其他字段的创建。

作为一个例子,我希望能够索引如下文档,其中“members”字段中对象的键是动态的:

POST /groups/group
{
    "members" : {
        "Bob" : {
            "age" : 50
        }
    }
}

POST /groups/group
{
    "members" : {
        "Alice" : {
            "age" : 40
        }
    }
}

但我还想将添加到“members”字段的字段限制为“object”类型,并限制内部对象中的字段,以便只允许“age”字段。例如,当我尝试索引它们时,以下两个文档应该生成错误:

POST /groups/group
{
    "members" : {
        "foo" : "bar",
        "Alice" : {
            "age" : 40
        }
    }
}

POST /groups/group
{
    "members" : {
        "Alice" : {
            "foo" : "bar",
            "age" : 40
        }
    }
}

以下是我一直在尝试的动态映射。当我尝试使用所需结构索引其中一个文档时,这会给我以下错误:“StrictDynamicMappingException [映射设置为严格,不允许[成员]内的[Bob]动态介绍]”。

PUT /groups/group/_mapping
{
    "dynamic" : "strict",
    "dynamic_templates" : [
        {
            "members_template" : {
                "path_match" : "members.*",
                "match_mapping_type" : "object",
                "mapping" : {
                    "type" : "object",
                    "properties" : {
                        "{name}" : {
                            "properties" : {
                                "age" : {"type" : "long"}
                            }
                        }
                    }
                }
            }
        }
    ],
    "properties":{
        "members":{
            "type":"object"
        }
    }
}

我已尝试在映射的各个部分中将“dynamic”设置为“true”,但这会破坏我要强制执行的限制。

关于如何在“成员”字段中允许动态密钥名称同时在其他地方保留“严格”设置的任何想法?

0 个答案:

没有答案