我想在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”,但这会破坏我要强制执行的限制。
关于如何在“成员”字段中允许动态密钥名称同时在其他地方保留“严格”设置的任何想法?