乐趣区

关于elasticsearch:实践004elasticsearch之Index-Template和Dynamic-Template

[toc]


一、Index Template 简介

1. 什么是 index 模板?

帮忙你设定 mappingssettings; 并依照肯定的规定,主动匹配到 新建的索引 上;

2. 对于 index 模板的几个问题

Q1: 已新建了索引 A 应用了模板 M, 批改了 M 后会影响 A 吗?

A: 不会! 模板仅仅在一个索引被创立时,才产生作用。批改模板不会影响曾经创立的索引。

Q2: 可否设定应用多个 index 模板?

A: 能够! 设定多个索引模板,这些模板会被 merge 在一起。

Q3: 设定多个 index 模板,起作用是按什么程序?

A: 你能够指定 order 的数值,管制 merging 的过程。order 大的无限起作用!

二、index template 案例

2.1 两个模板定义和创立索引的作用优先级

2.1.1 模板 1 设定所有索引创立时 -> 分片数 1,正本数 1

# 1. 所有索引:分片数 1,正本数 1
PUT _template/my_template
{"index_patterns": ["*"],
  "order": 10, // order 大的优先
  "version": 1,
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  }
}

2.1.2 模板 2 设定 test 结尾的索引设置主分片 1,正本数 2; 敞开 date 辨认,开启数字辨认

  • date 辨认 (date_detection) 就是:字符串的日期,辨认为 date(默认是开启的)
  • 数字辨认 (numeric_detection) 就是:字符串的数字,辨认为数字类型(默认是敞开的);
#2.test 结尾的索引设置主分片 1,正本数 2; 敞开 date 辨认,开启数字辨认
PUT _template/my_template_test
{"index_patterns": ["test*"],
  "order": 1,
  "settings":{
    "number_of_shards": 1,
    "number_of_replicas": 2
  },
  "mappings":{
    "date_detection": false,
    "numeric_detection": true
  }
}

2.1.3 创立 test 结尾的索引,验证

PUT test_template_index/_doc/1
{
  "someNumber": "1",
  "somDate": "2019/01/01"
}

看看作用成果:

GET test_template_index/_mapping

看看后果:

{
  "test_template_index" : {
    "mappings" : {
      "date_detection" : false,
      "numeric_detection" : true,
      "properties" : {
        "somDate" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "someNumber" : {"type" : "long"}
      }
    }
  }
}

可见模板 2 起作用了:somDate 被辨认为 text 而非 date; someNumber 被辨认为 long 而非 text 了;

默认的话,somDate 是会被辨认为 date, someNumber 会被辨认为text 的!

咱们再看看对于 shardsreplicas的数量,谁的起作用了:

GET test_template_index/_settings

看看后果:两个都是 1

{
  "test_template_index" : {
    "settings" : {
      "index" : {
        "creation_date" : "1650989910135",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "HdvbZrC8SwCH9xA3CbzFxg",
        "version" : {"created" : "7050299"},
        "provided_name" : "test_template_index"
      }
    }
  }
}

看来这个是 模板 1 起作用了,order 大的被抉择了!

所以论断:

  • 多个模板匹配的话,都会启用
  • 最初将所有配置 merge, order 大的会笼罩小的中的配置;

三、Dynamic Template 简介

3.1 什么是动静模板?

次要用来动静设定字段类型:依据 ES 辨认的数据类型,联合 字段名称 来动静设定字段类型。

举例:

  • 设置所有字符串类型都为 keyword, 或者敞开 text 类型的keyword 子字段;
  • is 结尾的字段都设定为boolean;
  • long_结尾的字段都设定为 long 类型;

3.2 动静模板留神

  • 是定义在 某个索引 mappings中 –> 区别于 index template;
  • template 有一个名称;
  • 匹配规定为一个数组;
  • 为匹配字段设置 mapping;

3.3 动静模板的例子

指定某个索引的 is* 辨认为 boolean;字符串都设为 keyword

例 1 - 动静模板设定:

PUT my_dynamic_template_index
{
    "mappings": {
        "dynamic_templates": [
            {
                "is_x_to_boolean": { // 自定义名称
                    "match_mapping_type": "string",
                    "match": "is*",
                    "mapping": {"type": "boolean"}
                }
            },
            {
                "string_to_keyword": { // 自定义名称
                    "match_mapping_type": "string",
                    "mapping": {"type": "keyword"}
                }
            }
        ]
    }
}

留神:dynamic_templates是个数组,其中每个对象是一个动静模板,每个模板有一个自定义的名字:

例 1 - 动静模板测试:

PUT my_dynamic_template_index/_doc/1
{"firstName":"Nie", "isVip":"true"}

查看 mapping:

GET my_dynamic_template_index/_mapping

后果:

{
  "my_dynamic_template_index" : {
    "mappings" : {
      "dynamic_templates" : [
        {
          "is_x_to_boolean" : {
            "match" : "is*",
            "match_mapping_type" : "string",
            "mapping" : {"type" : "boolean"}
          }
        },
        {
          "string_to_keyword" : {
            "match_mapping_type" : "string",
            "mapping" : {"type" : "keyword"}
          }
        }
      ],
      "properties" : {
        "firstName" : {"type" : "keyword"},
        "isVip" : {"type" : "boolean"}
      }
    }
  }
}

能够看到起作用了。

退出移动版