美文网首页
Elasticsearch动态模板设置

Elasticsearch动态模板设置

作者: 觉释 | 来源:发表于2020-07-27 14:53 被阅读0次

    一、动态mapping

    在我们最开始使用ES的时候,可能还不太了解mapping,也没有添加过mapping为什么我们还是能够正常的添加文档。

    那是因为ES可以动态映射,添加文档的时候遇到没有的字段,可以动态的添加到mapping中,下面是一些默认的mapping方式。

    | 数值 | 如果缺失在mapping中添加类型 |
    | null | 空值不添加类型到mapping |
    | true、false | 添加一个boolean类型 |
    | 浮点数 | 添加一个floating类型 |
    | 整数 | 添加一个long类型|
    | object | 添加一个object类型 |
    | array | 根据数组第一个元素决定类型 |
    |字符串 | 可能被映射为date、double、long、text、keyword类型 |
    注意:

    数字类型默认的是被映射为long而不是integer
    字符串可以被映射为多种类型,主要看内容
    我们可以自定义字符串映射为日期的格式

    "mappings": {
        "date_detection": true,
        "dynamic_date_formats": ["MM/dd/yyyy"],
        "numeric_detection": true
      }
     
    

    二、自定义动态mapping

    如果觉得ES默认的mapping方式对于自己的业务来说还有优化空间,我们就可以自定义的动态mapping方式定制映射方式。

    自定义三种方式

    1、 根据字段类型mapping

    根据字段类型匹配通过 match_mapping_type 属性来控制,当添加文档的时候,ES的JsonParser解析出来的类型是match_mapping_type指定的类型,就会使用对应的mapping

    {
        "mappings": {
            "dynamic_templates": [
                {
                    "dt_name_one": {
                        "match_mapping_type": "long",
                        "mapping": {
                            "type": "integer"
                        }
                    }
                },
                {
                    "dt_name_two": {
                        "match_mapping_type": "string",
                        "mapping": {
                            "type": "text",
                            "fields": {
                                "raw": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                }
            ]
        }
    }
    

    2、 根据字段名称mapping

    根据字段名称映射使用的是 match、unmatch、match_pattern 属性来控制。

    {
        "mappings": {
            "dynamic_templates": [
                {
                    "longs_as_strings": {
                        "match_mapping_type": "string",
                        "match": "long_*",
                        "unmatch": "*_text",
                        "mapping": {
                            "type": "long",
                            "enable": false
                        }
                    }
                },
                {
                    "longs_as_strings": {
                        "match_pattern": "regex",
                        "match": "^profit_\\d+$",
                        "mapping": {
                            "type": "long",
                            "index": false,
                            "norms": false,
                            "doc_values": false
                        }
                    }
                }
            ]
        }
    }
    

    3、根据字段路径mapping

    按路径匹配使用的是 path_match、path_unmatch 属性来指定。

    {
        "mappings": {
            "dynamic_templates": [
                {
                    "dt_path_name": {
                        "path_unmatch": "user.*",
                        "path_match": "*.conceal",
                        "mapping": {
                            "type": "text",
                            "enable": false
                        }
                    }
                }
            ]
        }
    }
    

    三、动态mapping的添加方式

    添加动态索引有2种方式:
    第一种就是为索引添加mapping的时候同时指定动态映射的mapping。
    第二种就是在索引模板中指定。

    前面我们已经看了在添加索引mapping的时候指定,下面我们就来看一下在设置索引模板的时候指定。

    四、索引模板

    {
      "order": 0,                            // 模板优先级,数字越大优先级越高
      "index_patterns": ["test*,user*"],     // 匹配该模板的索引名称正则
      "settings": {},                        // 索引设置
      "mappings": {},                        // 索引中各字段的映射定义
      "aliases": {}                          // 索引的别名
    }
    

    如上所示,就是在索引模板中最常见的属性了:
    order:当索引名称匹配到多个索引模板的时候,换选择order值大的
    index_patterns:索引名称匹配表达式,例如,所用以名称以test开头的都可以匹配到test*
    settings:索引配置
    mappings:默认的mapping

     {
        "order": 1,
        "index_patterns": [
            "test*",
            "user*"
        ],
        "settings": {
            "number_of_shards": 1
        },
        "mappings": {
            "_source": {
                "enabled": false
            },
            "dynamic_templates": [
                {
                    "string_as_keyword": {
                        "match_mapping_type": "long",
                        "mapping": {
                            "type": "integer"
                        }
                    }
                }
            ],
            "properties": {
                "host_name": {
                    "type": "keyword"
                },
                "created_at": {
                    "type": "date",
                    "format": "yyyy-MM-dd"
                }
            }
        },
        "aliases": {
            "alias_name": {
                "filter": {
                    "term": {
                        "user": "tim"
                    }
                },
                "routing": "tim"
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:Elasticsearch动态模板设置

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