zoukankan      html  css  js  c++  java
  • elasticsearch 动态模板设置

    自定义动态映射

      如果你想在运行时增加新的字段,你可能会启用动态映射。然而,有时候,动态映射 规则 可能不太智能。幸运的是,我们可以通过设置去自定义这些规则,以便更好的适用于你的数据。

    日期检测

      当 Elasticsearch 遇到一个新的字符串字段时,它会检测这个字段是否包含一个可识别的日期,比如 2014-01-01 。如果它像日期,这个字段就会被作为 date 类型添加。否则,它会被作为 string 类型添加。

      有些时候这个行为可能导致一些问题。想象下,你有如下这样的一个文档:

      {"note": "2014-01-01"}

      假设这是第一次识别 note 字段,它会被添加为 date 字段。但是如果下一个文档像这样:

      {"note": "Logged out"}

      这显然不是一个日期,但为时已晚。这个字段已经是一个日期类型,这个 不合法的日期 将会造成一个异常。

      日期检测可以通过在根对象上设置 date_detection 为 false 来关闭:

    PUT /my_index
    {
        "mappings": {
            "my_type": {
                "date_detection": false
            }
        }
    }
    

      使用这个映射,字符串将始终作为 string 类型。如果你需要一个 date 字段,你必须手动添加。

      我们可以通过以下方式对日期格式的数据进行格式化:

    PUT my_index
    {
      "mappings": {
        "my_type": {
          "properties": {
            "date": {
              "type":   "date",
              "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
          }
        }
      }
    }
    

       可以使用 || 分隔多个格式 作为分隔符。 将依次尝试每种格式,直到找到匹配的格式。如果不指定,则使用默认格式:

      "strict_date_optional_time||epoch_millis"

      默认可以被解析的 date 类型格式如下所示:

    • 包含格式化日期的字符串,例如 “2015-01-01”或“2015/01/01 12:10:30”。
    • 代表milliseconds-since-the-epoch的长整型数。
    • 代表seconds-since-the-epoch的整型数。

      需要注意:以上默认日期类型是在未给定固定类型的情况下,会按照默认方式自动匹配的。

    动态模板

      使用 dynamic_templates ,你可以完全控制新检测生成字段的映射。你甚至可以通过字段名称或数据类型来应用不同的映射。

      每个模板都有一个名称,你可以用来描述这个模板的用途, 一个 mapping 来指定映射应该怎样使用,以及至少一个参数 (如 match) 来定义这个模板适用于哪个字段。

      模板按照顺序来检测;第一个匹配的模板会被启用。例如,我们给 string 类型字段定义两个模板:

      • es :以 _es 结尾的字段名需要使用 spanish 分词器。

      • en :所有其他字段使用 english 分词器。

      我们将 es 模板放在第一位,因为它比匹配所有字符串字段的 en 模板更特殊:

    PUT /my_index
    {
        "mappings": {
            "my_type": {
                "dynamic_templates": [
                    { "es": {
                          "match":              "*_es",         -- (1)
                          "match_mapping_type": "string",
                          "mapping": {
                              "type":           "string",
                              "analyzer":       "spanish"
                          }
                    }},
                    { "en": {
                          "match":              "*",            -- (2)
                          "match_mapping_type": "string",
                          "mapping": {
                              "type":           "string",
                              "analyzer":       "english"
                          }
                    }}
                ]
    }}}
    
    1. 匹配字段名以 _es 结尾的字段。

    2. 匹配其他所有字符串类型字段。

      match_mapping_type 允许你应用模板到特定类型的字段上,就像有标准动态映射规则检测的一样, (例如 string 或 long)。

      match 参数只匹配字段名称, path_match 参数匹配字段在对象上的完整路径,所以 address.*.name 将匹配这样的字段:

    {
        "address": {
            "city": {
                "name": "New York"
            }
        }
    }

      unmatch 和 path_unmatch将被用于未被匹配的字段。

  • 相关阅读:
    Mysql多实例
    nginx不间断服务平滑升级
    源码编译安装mysql
    nginx优化后的主配置文件
    Nginx安装与应用
    Android 7 修改启动动画和开机声音
    Android 7 默认声音/大小修改
    高通与At指令:ATFWD解析
    高通与At指令:AtCop解析
    高通与At指令:基础概念
  • 原文地址:https://www.cnblogs.com/liang1101/p/9317616.html
Copyright © 2011-2022 走看看