ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # Mapping映射 * 什么是Mapping映射? 映射: 创建索引的时候,可以预先定义字段的类型以及相关属性 作用: 这样会让索引建立得更加的细致和完善 分类: 静态映射和动态映射 * 类型映射关系 ![](https://box.kancloud.cn/e9ebe3cf2194d80fc2d41c7b5a0ae768_943x398.png) * 映射的属性方法 除了定义字段的类型,还可以给字段添加相关的属性 ![](https://box.kancloud.cn/24d78da4363df0654413e6f83edb3a57_1870x1052.png) 建立映射 ~~~ POST /library { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "books": { "properties": { "title": {"type": "string"}, "name": {"type":"string","index":"not_analyzed"}, "publish_date": {"type":"date", "index":"not_analyzed"}, "price": {"type":"double"}, "number": {"type": "integer"} } } } } ~~~ 查看下 ~~~ GET /library ~~~ # 动态映射 * 什么是动态映射? 文档中碰到一个以前没有见过的字段时,动态映射可以自动决定该字段的类型,并对该字段添加映射 * 如何配置动态映射? 通过dynamic属性进行控制 true: 默认值,动态添加字段; false忽略新字段; strict: 碰到陌生字段,抛出异常 * 适用范围 适用在根对象上或者object类型的任意字段上 动态映射 ~~~ PUT /library { "mappings": { "books": { "dynamic": "strict", "properties": { "title": {"type": "string"}, "name": {"type": "string", "index": "not_analyzed"}, "publish_date": {"type": "date","index": "not_analyzed"}, "price": {"type": "double"}, "number": { "type": "object", "dynamic": true } } } } } ~~~ # 管理映射 获取映射信息 更新映射信息 删除映射信息 ~~~ # 获取某个索引信息 GET /library/_mapping # 获取某个索引下某个type的映射信息 GET /library/_mapping/books # 获取这个集群内所有的映射信息 GET /_all/_mapping # 获取这个集群内某两个或多个type的映射信息 GET /_all/_mapping/books,bank_account ~~~ ~~~~ # 更新修改Mapping映射 # 很遗憾,mapping一旦建立,就不能修改现有的字段映射 # 如果要推到现有的映射,你得重新建立一个索引,然后重新定义映射 # 然后把之前索引里的数据导入到新建立的索引里 # ------具体方法------- # 1. 给现有的索引定义一个别名,并且把现有的索引指向这个别名,运行步骤2 # 2. 运行: PUT /现有索引/_alias/别名A # 3. 新创建一个索引,定义好最新的映射 # 4. 将别名指向新的索引,并且取消之前索引的指向,运行步骤5 # 5.运行: POST /_aliases { "actions": [ {"remove": {"index":"现有索引名", "alias":"别名A"}}, {"add": {"index":"新建索引名", "alias":"别名A"}} ] } # 注: 通过这几个步骤就实现了索引的平滑过渡,并且是零停机的 ~~~ ~~~ # 删除映射 DELETE /library/books DELETE /library/books/_mapping DELETE /library/_mapping/books ~~~