Elasticsearch--索引映射管理

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

映射(mapping)

映射像关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型,以及一个索引范围内的设置。一个映射可以事先被定义,或者在第一次存储文档的时候自动识别。

增加映射

API允许向索引(index)添加文档类型(type),或者向文档类型中添加字段(field)。

    PUT /secisland
    {
      "mappings": {
        "log":{
          "properties": {
            "message":{
              "type": "text"
            }
          }
        }
      }
    }
    
    
    GET /secisland/_mapping

添加索引名为secisland,文档类型为log,其中包含字段message,字段类型为text。


    PUT secisland/_mapping/user
    {
      "properties": {
        "name": {
          "type": "text"
        }
      }
    }

向已经存在的索引secisland添加文档类型为user,包含字段name,字段类型为text。


```js PUT secisland/_mapping/log { "properties": { "user_name": { "type": "text" } } } ``` 已经存在索引secisland,文档类型为log,添加新的字段user_name,字段类型是字符串。

    //查看mapping
    GET /secisland/_mapping

返回:

    {
      "secisland": {
        "mappings": {
          "user": {
            "properties": {
              "name": {
                "type": "text"
              }
            }
          },
          "log": {
            "properties": {
              "message": {
                "type": "text"
              },
              "user_name": {
                "type": "text"
              }
            }
          }
        }
      }
    }

1. 多个索引设置映射
可以一次向多个索引添加文档类型:

    PUT /{index}/_mapping/{type}
    {body}
  • {index}可以有多种方式,都好分隔:比如test1,test2,test3。_all表示所有索引。通配符*表示所有。test*表示以test开头。
  • {type}需要添加或更新的文档类型。
  • {body}需要添加的字段或字段类型

2. 更新字段映射
在一般情况下,对现有字段的映射不会更新。对这个规则有一些例外。

  1. 新的属性被添加到对象数据类型的字段。
  2. 新的多域字段被添加到现有的字段。
  3. doc_values可以被禁用。
  4. 增加了ignore_above参数

3. 不同类型之间的冲突
在同一个索引的不同类型中,相同名称的字段中必须有相同的映射,因为它们内部是在同一个领域内,如果试图在这种情况下更新映射参数,系统将会抛出异常。除非在更新的时候指定update_all_types参数。在这种情况下它将更新所有同一索引同名称的映射参数。

示例:

    PUT /secisland/
    {
      "mappings": {
        "type_one":{
          "properties": {
            "text":{"type": "text", "analyzer": "standard"}
          }
        },
        "type_two":{
          "properties": {
            "text":{"type": "text", "analyzer": "standard"}
          }
        }
      }
    }

修改type_one的映射

    PUT /secisland/_mapping/type_one
    {
      "properties": {
        "text":{
          "type": "text",
          "analyzer": "standard",
          "search_analyzer": "whitespace"
        }
      }
    }

报错:


如果要修改,添加参数update_all_types,同时更新两个类型。

    PUT /secisland/_mapping/type_one?update_all_types
    {
      "properties": {
        "text":{
          "type": "text",
          "analyzer": "standard",
          "search_analyzer": "whitespace"
        }
      }
    }
获取映射

获取文档映射接口允许通过索引或者索引和类型来搜索:

    GET /secisland/_mapping/type_one

系统支持同时获取多个索引和类型的语法。
获取文档映射接口一次可以获取多个索引或文档映射类型。

格式如下:

    GET /{index}/_mapping/{type}
    
    {type}和{index}可以接受逗号(,)分隔符,也可以使用_all来表示全部索引。

获取字段映射

获取文档字段接口允许搜索一个或多个字段。这个用来搜索想要搜索的字段, 而不是某个索引或者文档类型的全部内容。

示例:搜索secisland索引中type_one所有为text类型的字段

    GET /secisland/_mapping/type_one/field/text

返回:

    {
      "secisland": {
        "mappings": {
          "type_one": {
            "text": {
              "full_name": "text",
              "mapping": {
                "text": {
                  "type": "text",
                  "analyzer": "standard",
                  "search_analyzer": "whitespace"
                }
              }
            }
          }
        }
      }
    }

一次获取多个索引或文档映射类型:

    GET /{index}/{type}/_mapping/field/{field}

{index},{type},{field}可以使用逗号(,)分隔,也可以使用通配符。

    GET /secisland,kimchy/_mapping/field/message
    GET /_all/_mapping/secilog,book/field/message,user.id
    GET /_all/_mapping/tw*/field/*.id

指定字段的操作如下。获取文档字段接口,可以使用逗号(,)分隔符或者通配符(*)。

对象类型的字段可以使用(.)来指定具体字段。

    GET /secisland/_mapping/article/field/author.id

判断类型是否存在

检查索引或文档类型是否存在:

    HEAD /secisland/secilog

存在返回200,不存在返回404

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值