资讯专栏INFORMATION COLUMN

es通过dynamic templates自动创建自动适配类型的索引

dkzwm / 3239人阅读

摘要:可以通过向中追加,如果新增的和某个旧的重名,它将会替代那个旧的。中的的类型用于匹配被识别到的数据类型,换句话说,是对这个应该是什么类型的猜测。示例把自动识别为类型的定义为类型,把自动识别为类型的同时定义为和和定义应用于的。

基本思路

创建与索引名关联的templates,写入的时候指定索引名,根据es自动创建索引的特性+templates自动创建自己需要的索引

es动态mapping dynamic templates

Dynamic templates 用于自定义在动态添加field的时候自动给field设置的数据类型, 给什么类型基于:

datatype detected by Elasticsearch

the name or the field

the full dotted path to the field

创建dynamic templates

Dynamic templates are specified as an array of named objects:

   "dynamic_templates": [
    {
      "my_template_name": { 
        ...  match conditions ... 
        "mapping": { ... } 
      }
    },
    ...
  ]

my_template_name can be any string value

The match conditions can include any of : match_mapping_type, match, match_pattern, unmatch, path_match, path_unmatch.

The mapping that the matched field should use

Templates将会顺序执行,直到新增的字段value某一个templates的match condition。可以通过PUT mappingAPI向templates list中追加templates,如果新增的templates和某个旧的重名,它将会替代那个旧的。

templates中的match conditions的类型 match_mapping_type

match_mapping_type用于匹配被dynamic field mapping识别到的es数据类型,换句话说,是es对这个field应该是什么类型的猜测。只有以下数据类型能被es自动识别:

boolean, date, double, long, object, string

可以在定义match_mapping_type的时候用*来表示匹配所有数据类型。
示例:

把自动识别为long类型的field定义为interger类型,把自动识别为string类型的field同时定义为analyzed和not_analyzed:
PUT my_index
{
  "mappings": {
    "my_type": {
      "dynamic_templates": [
        {
          "integers": {
            "match_mapping_type": "long",
            "mapping": {
              "type": "integer"
            }
          }
        },
        {
          "strings": {
            "match_mapping_type": "string",
            "mapping": {
              "type": "string",
              "fields": {
                "raw": {
                  "type":  "string",
                  "index": "not_analyzed",
                  "ignore_above": 256
                }
              }
            }
          }
        }
      ]
    }
  }
}
match and unmatch

match和unmatch定义应用于filedname的pattern。
示例:

定义一个匹配所有以long_开头且不以_text结束的string类型的模板
PUT my_index
{
  "mappings": {
    "my_type": {
      "dynamic_templates": [
        {
          "longs_as_strings": {
            "match_mapping_type": "string",
            "match":   "long_*",
            "unmatch": "*_text",
            "mapping": {
              "type": "long"
            }
          }
        }
      ]
    }
  }
}
match_pattern

用于调整match参数的行为,比如当match_pattern的值为regex时,match可以支持完整的java正则表达式而不是简单的通配符。

path_match and path_unmatch

用于object类型

{name}和{dynamic_type}

{name}和{dynamic_type}占位符放在mapping中,值为field name和field被es识别的数据类型

覆盖default template

可以通过设置_default_类型的mapping覆盖默认的template,影响范围为所有的indices和types


结合动态mapping和auto create index自动创建索引

通过index template api创建索引模板

指定索引名写入数据,或者用索引名创建索引

示例如下

(5.x+):
PUT _template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "_doc": {
      "_source": {
        "enabled": false
      },
      "properties": {
        "host_name": {
          "type": "keyword"
        },
        "created_at": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss Z YYYY"
        }
      }
    }
  }
}
(2.3)
PUT /_template/template_1
{
  "template": "te*",
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "type1": {
      "_source": {
        "enabled": false
      },
      "properties": {
        "host_name": {
          "type": "string",
          "index": "not_analyzed"
        },
        "created_at": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss Z YYYY"
        }
      }
    }
  }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/34364.html

相关文章

  • 快速搭建ELK日志收集(kafka队列版)

    摘要:快速搭建日志收集版本进行文章的第二次修改,包括了之前的简单方案的升级过程。分割线快速搭建日志收集第一版本新项目短时间来实现日志采集。 快速搭建elk日志收集 kafka版本 进行文章的第二次修改,包括了之前的简单方案的升级过程。 因为业务的不断更新升级,为了保证线上业务也能正常使用elk服务,并且使得elk的服务和线业务流解耦(即避免直接写入es的方式可能会带来的耗时影响)所以我们采用...

    妤锋シ 评论0 收藏0
  • 快速搭建ELK日志收集(kafka队列版)

    摘要:快速搭建日志收集版本进行文章的第二次修改,包括了之前的简单方案的升级过程。分割线快速搭建日志收集第一版本新项目短时间来实现日志采集。 快速搭建elk日志收集 kafka版本 进行文章的第二次修改,包括了之前的简单方案的升级过程。 因为业务的不断更新升级,为了保证线上业务也能正常使用elk服务,并且使得elk的服务和线业务流解耦(即避免直接写入es的方式可能会带来的耗时影响)所以我们采用...

    ingood 评论0 收藏0
  • elasticsearch学习笔记(三十五)——Elasticsearch 索引管理

    摘要:要禁用允许通过通配符删除索引,或者将配置中的设置设置为。它删除了大多数标点符号,小写术语,并支持删除停用词。该分析器是像,而且还支持去除停止词。所述分析器使用一个正则表达式对文本进行拆分。 索引的基本操作 创建索引 PUT /{index} { settings: {}, mappings: { properties: { } } } 创建索引示例: PU...

    anyway 评论0 收藏0
  • ElasticSearch索引跨集群迁移

    ElasticSearch索引跨集群迁移 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...

    不知名网友 评论0 收藏1747
  • 贷前系统ElasticSearch实践总结

    摘要:本文将介绍贷前系统的实践经验。使用位图索引查询男性并且已婚的记录,即第个用户为已婚男性。二使用心得下面结合贷前系统具体的使用案例,介绍的一些心得总结。 贷前系统负责从进件到放款前所有业务流程的实现,其中涉及一些数据量较大、条件多样且复杂的综合查询,引入ElasticSearch主要是为了提高查询效率,并希望基于ElasticSearch快速实现一个简易的数据仓库,提供一些OLAP相关功...

    paraller 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<