当前位置: 首页 > 面试题库 >

嵌套类型的动态映射

郗缪文
2023-03-14
问题内容

我正在尝试为如下对象创建动态映射:

  {
    "product": {
        "productId": 99999,
        "manufacturerId": "A0001",
        "manufacturerCode": "A101LI",
        "name": "Test Product",
        "description": "Describe the product here.",
        "feature_details":{
            "category": "Category1",
            "brand": "Brand Name"
        },
        "feature_tpcerts":{
            "certifiedPass": true,
            "levelCertified": 2
        },
        "feature_characteristics":{
            "amount": 0.73,
            "location": 49464
        }
    }
}

我希望feature_*属性为嵌套类型,该类型是我在下面的映射中使用nested_feature模板定义的,并且按预期工作。但是,我也想让属性的嵌套对象中的每个属性feature_*multi_value带有facet定义的其他属性。我尝试了第二个nested_template模板,但没有成功。

 {
    "product" : {
        "_timestamp" : {"enabled" : true, "store": "yes" },
        "dynamic_templates": [
            {
              "nested_feature": {
                "match" : "feature_*",
                "mapping" : {
                  "type" : "nested",
                  "stored": "true"
                }
              }
            },
            {
                "nested_template": {
                    "match": "feature_*.*",
                    "mapping": {
                        "type": "multi_field",
                        "fields": {
                            "{name}": {
                                "type": "{dynamic_type}",
                                "index": "analyzed"
                            },
                            "facet": {
                                "type": "{dynamic_type}",
                                "index": "not_analyzed"
                            }
                        }
                    }
                }
            }           
        ],
        "properties" : {
            "productId" : { "type" : "integer", "store" : "yes"},
            "manufacturerId" : { "type" : "string", "store" : "yes", "index" : "analyzed"},
            "manufacturer" : { "type" : "string", "store" : "yes", "index" : "not_analyzed"},
            "manufacturerCode" : { "type" : "string", "store" : "yes"},
            "name" : {"type" : "string", "store" : "yes"},
            "description": {"type": "string", "index" : "analyzed"}
        }
    }
}

不幸的是,属性中的feature_*属性是从另一个进程创建的,几乎可以是任何名称/值对。关于如何使用动态模板将属性设置为嵌套的任何建议,以及如何使嵌套对象中的每个属性multi_field带有附加facet属性?


问题答案:

您只需要使用即可,path_match而不必match在模式引用整个字段路径时使用它,否则仅考虑其名称(最后一部分)。查看根对象的参考页,其中还包含一些与动态模板有关的文档。

您可能还想使用,match_mapping_type因为您无法"index":"analyzed"为例如数字或布尔字段设置。在这种情况下,您可能想根据字段类型做不同的事情。

我注意到您的文档包含产品根对象,您实际上并不需要它。我将其删除,因为类型名称已经是产品。

另外,除非真正需要,否则我将避免显式存储字段,例如,对于Elasticsearch而言,默认情况下会存储字段,这就是您一直需要的_source字段。

以下映射应适用于您的情况(文档中没有产品根对象):

{
      "product" : {
          "dynamic_templates": [
              {
                "nested_feature": {
                  "match" : "feature_*",
                  "mapping" : {
                    "type" : "nested"
                  }
                }
              },
              {
                  "nested_template": {
                      "path_match": "feature_*.*",
                      "match_mapping_type" : "string",
                      "mapping": {
                          "type": "multi_field",
                          "fields": {
                              "{name}": {
                                  "type": "{dynamic_type}",
                                  "index": "analyzed"
                              },
                              "facet": {
                                  "type": "{dynamic_type}",
                                  "index": "not_analyzed"
                              }
                          }
                      }
                  }
              }                
          ]
      }
  }


 类似资料:
  • 我试图为对象创建一个动态映射,如下所示:

  • 我必须做一个用户/权限表,其中“权限”是X轴,“用户”是Y轴。表的其余部分由复选框填充,这些复选框指示X用户是否具有Y权限。这两个都是动态长度,每个API都可以访问另一个API。即:权限API为每个权限,具有该权限的用户数组。此外,用户API为每个用户,用户拥有的权限数组。 > 我有嵌套贴图的问题,我觉得这样做很昂贵?(如果有40个权限和350个用户,我们将讨论14k复选框) 如何为每个复选框保存

  • 问题内容: 我的数据结构非常通用。几乎所有类型的数据都适合我的数据结构。 另一个文档可能是这样的: 该数据可以更改,并且字段可以具有任何类型和名称。如何动态创建模板映射,以便通过数据中“类型”的值来设置映射的“类型”?例如,值:34.50,类型:在同一时间浮动相同数据“值”:“哈利·波特”,类型:字符串 我已经知道ES中已经做到了这一点,但是我无法做出真正使用文档中指定的“ type”值来实际为该

  • 随着ElasticSearch计划删除映射类型,这是否也意味着不再使用嵌套文档和嵌套查询?ElasticSearch将如何支持无类型上下文中的嵌套对象查询? 我正在考虑的功能是能够只返回匹配搜索条件的嵌套数组中的命中。 编辑1:ElasticSearch版本6中的映射查询示例 ElasticSearch 6映射 ElasticSearch 6查询

  • 本页包含内容: 嵌套类型实例 嵌套类型的引用 枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义嵌套类型,可以在枚举类型、类和结构体中定义支持嵌套的类型。 要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。 嵌套类型实例 下面这个例子定义了一个结

  • 这是显示类型列表动态不是类型映射字符串动态的子类型“现在当我运行模拟器时,显示”类型列表动态不是类型映射字符串动态的子类型“在我的模拟器上,我如何修复它? 现在我想创建关于查找api id的程序,从我的模拟器中使用文本字段和按钮,当我把一些数字和单击按钮时,会显示该ID的数据或标题,但我只是初学者,所以如果有人认为我的代码是正确的或不正确的或者你有推荐请告诉我 My JSON JSON代码 应用程