美文网首页ELK
15.Elasticsearch动态映射-2

15.Elasticsearch动态映射-2

作者: 大勇任卷舒 | 来源:发表于2022-04-08 14:14 被阅读0次

    15.1 动态field映射

    15.1.1 Customizing detected date formats

    • dynamic_date_formats可以自定义以支持所需的 date formats:
    PUT my-index-000001
    {
      "mappings": {
        "dynamic_date_formats": ["MM/dd/yyyy"]
      }
    }
    
    PUT my-index-000001/_doc/1
    {
      "create_date": "09/25/2015"
    }
    

    15.1.2 Numeric detection

    • 虽然JSON支持本机floating point和integer data types,但某些应用程序或语言有时可能会将数字呈现为string
    • 通常正确的解决方案是显式映射这些field,但可以启用Numeric detection(默认情况下禁用)以自动执行此操作:
    PUT my-index-000001
    {
      "mappings": {
        "numeric_detection": true
      }
    }
    PUT my-index-000001/_doc/1
    {
    "my_float": "1.0", 
    "my_integer": "1" 
    }
    

    15.2 动态模板

    • 可以使用动态模板来定义自定义映射,这些映射可以根据匹配条件应用于动态添加的field:
      • match_mapping_type 对 Elasticsearch 检测到的数据type进行操作
      • match并unmatch使用模式匹配field名称
      • 如果动态模板未定义match_mapping_type、match或 path_match,则它将不匹配任何field
        • 但可以在模板变量dynamic_templates部分按名称引用模板
    • 使用映射规范中的{name}和{dynamic_type} 模板变量作为placeholders
    • 动态模板被指定为命名对象数组:
    "dynamic_templates": [
      {
        "my_template_name": { 
          ... match conditions ... 
          "mapping": { ... } 
        }
      },
      ...
    ]
    
    • 验证动态模板
      • 如果提供的映射包含无效的映射片段,则返回验证错误
        • 在索引时应用动态模板时进行验证,并且在大多数情况下,在动态模板更新时进行验证
        • 在某些情况下,提供无效的映射片段可能会导致动态模板的更新或验证失败:
          • 如果没有match_mapping_type指定但模板对至少一种预定义的映射类型有效,则映射片段被视为有效
          • 如果{name}在映射片段中使用了占位符,则在更新动态模板时会跳过验证
      • 模板按顺序处理按照第一个匹配模板选取
        • 通过更新映射API放置新的动态模板时,将覆盖所有现有模板
        • 这允许动态模板在最初添加后重新排序或删除
    • 在动态模板中映射运行时field
      • 如果希望 Elasticsearch 将某种type的新field动态映射为运行时field,需
        "dynamic":"runtime"在索引映射中设置
        • 这些field未编入 index,并_source在查询时加载
      • 或者,可以使用默认的动态映射规则,然后创建动态模板将特定field映射为运行时field
        • "dynamic":"true"在索引映射中设置 ,然后创建一个动态模板以将特定type的新field映射为运行时field
    • 以下请求定义了一个名为strings_as_ip的动态模板strings_as_ip


    • match_mapping_type
      • match_mapping_type是由JSON解析器检测到的数据type
      • 因为 JSON 不区分 long和 integer或 double和 float,所以它总是选择更广泛的数据type,例如long for integers和double for floating-point numbers
    • 使用wildcard ( *) 匹配所有数据type
    • 例如,如果想将所有整数field映射为integer而不是 long,并且所有string field都映射为text和keyword,可以使用以下模板:


    • match 和 unmatch
      • match参数使用模式匹配field名称,同时 unmatch使用模式排除匹配的field match
      • match_pattern参数调整是以完整Java正则表达式匹配,而不是简单的wildcard,例如:
    "match_pattern": "regex",
    "match": "^profit_\d+$"
    
    • 示例:匹配以string名称开头的所有fieldlong_(以结尾的field除外_text)并将它们映射为long field:


    • path_match 和 path_unmatch
      • 示例:将名称对象中任何field的值复制到top-level full_name field,中间field除外:


    • 例如,index以下文档将导致错误,因为该path_match设置还匹配对象field
      name.title,该field无法映射为文本:


    • 模板变量
      • 示例:将所有string field设置为使用analyzer与该field同名的field,并禁用doc_values所有非string field:


    • Structured search


    • text-only mappings for strings


    • text-only mappings for strings


    • index一个简单的文档


    • text-only mappings for strings
    GET my-index-000001/_mapping
    
    • Disabled norms


    • 时间序列


    大数据视频推荐:
    腾讯课堂
    CSDN
    ELK入门精讲
    AIOps智能运维实战
    ELK7 stack开发运维
    大数据语音推荐:
    ELK7 stack开发运维
    企业级大数据技术应用
    大数据机器学习案例之推荐系统
    自然语言处理
    大数据基础
    人工智能:深度学习入门到精通

    相关文章

      网友评论

        本文标题:15.Elasticsearch动态映射-2

        本文链接:https://www.haomeiwen.com/subject/jxfpjrtx.html