Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 如何在Elasticsearch中为字段定义动态模板映射,同时保持其他字段的严格动态设置?_Templates_Dynamic_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Mapping - Fatal编程技术网 elasticsearch,mapping,Templates,Dynamic,elasticsearch,Mapping" /> elasticsearch,mapping,Templates,Dynamic,elasticsearch,Mapping" />

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

Templates 如何在Elasticsearch中为字段定义动态模板映射,同时保持其他字段的严格动态设置?,templates,dynamic,elasticsearch,mapping,Templates,Dynamic,elasticsearch,Mapping,我想在Elasticsearch中为一个字段创建一个动态映射,但是我在这样做时遇到了问题,同时使用“严格的”动态设置来限制其他字段的创建 例如,我希望能够像下面这样索引文档,“members”字段中的对象键是动态的: POST /groups/group { "members" : { "Bob" : { "age" : 50 } } } POST /groups/group { "members" : {

我想在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[映射设置为strict,不允许在[members]中动态引入[Bob]”

我曾尝试在映射的各个部分将“dynamic”设置为“true”,但这打破了我想要实施的限制


关于如何允许在“成员”字段中使用动态键名,同时在其他位置保持“严格”设置,您有什么想法吗?

当您试图将工具弯曲变形以符合您的设计时,您应该重新考虑您的设计。更简单的方法是让members对象包含一个name字段和一个age字段。我上面使用的人为示例只是为了说明我希望实现的原则,我同意在示例情况下,您建议的替代方案将是一个更干净的设计。对于我正在处理的用例,能够通过“members.Bob.age”或“members.Alice.age”等路径来寻址属性将非常有用。我在自定义计分脚本中访问这些值,这样寻址可以避免我在大型对象列表上迭代,检查每个对象的“name”字段。但我也更喜欢在可能的情况下定义映射:)
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"
        }
    }
}