Elasticsearch——Index API详解

作者简介:大家好,我是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下的验证结果当作最终结果的水货们请闭嘴】

Index API

索引API是用于管理单个索引、索引设置、别名、映射和索引模 板等功能的接口。

1、创建索引

创 建 索 引 API 用 于 在 Elasticsearch 中 手 动 创 建 索 引 。 Elasticsearch中的所有文档都存储在某一个索引中。

    //语法
    PUT /<index>

最基本的形式如下:

    PUT twitter

它创建了名为twitter的索引,搜索设置都采用默认值。索引名称 有一些限制,原则是尽可能采用全小写的英文。限制如下:

  • 仅小写字母
  • 不能包括\、/、*、?、"、<、>、|、``(空格字符)、,、 #
  • 7.0版之前的索引可能包含冒号(:),但已弃用,7.0版中 不支持它
  • 不能以-、_、+开头
  • 不能是.或..
  • 不能长于255字节(请注意,它是字节数,因此多字节字符 将更快计数到255限制)

1.1、索引设置

创建的每个索引都可以具有与之关联的特定设置,这些设置在正 文中定义,示例如下:

    PUT twitter
    {
      "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 2
      }
    }

1.2、映射

映射(mapping)的功能是完成字段的定义,包括数据类型、存 储属性、分析器等。示例如下:

    PUT twitter
    {
      "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 2
      },
      "mappings": {
        "properties": {
          "field1": {
            "type": "text"
          }
        }
      }
    }

2、获取索引

获取一个或多个索引信息:

    //语法
    GET /<index>

示例:

    //获取单个索引
    GET /twitter
    
    //获取多个索引
    GET /twitter,twitter2
    
    //匹配
    GET /twitter*
    
    //获取所有索引
    GET /_all

返回:

    {
      "bank" : {
        "aliases" : { },
        "mappings" : {
          "properties" : {
            "account_number" : {
              "type" : "long"
            },
            "address" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "age" : {
              "type" : "long"
            },
            "balance" : {
              "type" : "long"
            },
            "city" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "email" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "employer" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "firstname" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "gender" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "lastname" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "state" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "settings" : {
          "index" : {
            "routing" : {
              "allocation" : {
                "include" : {
                  "_tier_preference" : "data_content"
                }
              }
            },
            "number_of_shards" : "1",
            "provided_name" : "bank",
            "creation_date" : "1697003938876",
            "number_of_replicas" : "1",
            "uuid" : "1Ny9g32eTSutDG8gfLzQZg",
            "version" : {
              "created" : "7160099"
            }
          }
        }
      }
    }

3、更新索引

    //语法
    PUT /<index>/_settings

示例:

    PUT /twitter/_settings
    {
        "index" : {
            "number_of_replicas" : 2
        }
    }

4、删除索引

删除索引非常简单,但同时也会把索引数据一起删除,不可恢 复。

    //语法
    DELETE /<index>

示例:

    //删除单个索引
    DELETE /twitter
    
    //删除多个索引
    DELETE /twitter,twitter2
    
    //匹配
    DELETE /twitter*
    
    //删除所有索引
    DELETE /_all

5、判断索引是否存在

顾名思义,就是判断一个索引是否已存在。

    //语法
    HEAD /<index>

示例:

    HEAD test

返回:

    200 - OK

6、索引别名

别名就是索引另外的名称,可以用来实现跨索引查询、无缝切换 等功能。每个索引可以有若干的别名,不同的索引也可以使用相同的别名。

6.1、创建索引别名
    //语法
    PUT /<index>/_alias/<alias>
    
    POST /<index>/_alias/<alias>
    
    PUT /<index>/_aliases/<alias>
    
    POST /<index>/_aliases/<alias>

查询参数:

  • master_timeout: (可选,时间单位)连接到主节点的等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。
  • timeout: (可选,时间单位) 等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。

Request Body :

  • filter:(Required, query object) . 筛选查询(Filter query) 用来限制索引别名, 使用该别名时只返回符合过滤条件的文档。(这个应该是有body的时候才是必填的, 没有body就不用填写了)
  • routing: (Optional, string) 用于将操作路由到特定分片的自定义路由。
6.1.1、基于时间(time-based)的别名

比如给索引logs_20302801创建一个别名2030:

    PUT /logs_20302801/_alias/2030
6.1.2、基于用户(user-based)的别名

创建索引users, 它有一个字段user_id, 然后给个别名user_12, 限制user_id=12的文档:

    PUT /users
    {
      "mappings": {
        "properties": {
          "user_id":{"type": "integer"}
        }
      }
    }
     
    # 插入几个文档
    POST /users/_doc/10
    {
      "user_id": 10
    }
    POST /users/_doc/11
    {
      "user_id": 11
    }
    POST /users/_doc/12
    {
      "user_id": 12
    }
     
    # 查询, 能看到所有的文档
    GET /users/_search
     
    # 给个别名`user_12`, 限制user_id=12的文档:
    PUT /users/_alias/user_12
    {
      "routing": "12",
      "filter":{
        "term":{
          "user_id": 12
        }
      }
    }
     
    # 查询别名, 只能看到 user_id=12的文档
    GET /user_12/_search
6.1.3、创建索引时添加别名

建立索引 logs_20302801, 同时添加别名 2030、current_day

    PUT /logs_20302801
    {
        "mappings" : {
            "properties" : {
                "year" : {"type" : "integer"}
            }
        },
        "aliases" : {
            "current_day" : {},
            "2030" : {
                "filter" : {
                    "term" : {"year" : 2030 }
                }
            }
        }
    }

6.2、删除索引别名
    //语法
    DELETE /<index>/_alias/<alias>
    
    DELETE /<index>/_aliases/<alias>

路径参数:

  • <index>

支持多个索引以英文逗号分割, 支持通配符表达式。要匹配所有索引,可以使用 _all 或者 *。

    //删除多个索引的别名
    DELETE /twitter,users,orders/_alias/<alias>
     
    //删除所有索引的别名  ---这个比较危险, 请勿随意测试
    DELETE /_all/_alias/<alias>
    DELETE /*/_alias/<alias>
  • <alias>

支持多个索引以英文逗号分割, 支持通配符表达式。要匹配所有索引别名,可以使用 _all 或者 *。

     //删除指定索引的多个别名
    DELETE /<index>/_alias/alias1,alias2,alias3
     
    //按通配符删除指定索引的别名
    DELETE /<index>/_alias/ab*
     
    //删除指定索引的所有别名
    DELETE /<index>/_alias/*

查询参数:

  • master_timeout: (可选,时间单位)连接到主节点的等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。
  • timeout: (可选,时间单位) 等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。

示例:删除twitter索引的alias1别名

    DELETE /twitter/_alias/alias1

6.3、获取索引别名
    //语法
    GET /_alias
    
    GET /_alias/<alias>
    
    GET /<index>/_alias/<alias>

路径参数:

  • <index>:支持多个索引以英文逗号分割, 支持通配符表达式。要匹配所有索引别名,可以使用 _all 或者 *。
  • <index>:支持多个索引以英文逗号分割,支持通配符表达式。

查询参数:

  • allow_no_indices:默认true。如果设置为true, 则当全部使用通配符*、_all只检索不存在(missing)或者已关闭(closed)的索引时,不会抛出错误。

这个是和参数 expand_wildcards 一起使用时的描述。如果只用通配符去检索expand_wildcards=all的别名, 则无论如何不会抛出错误。但是这里的missing条件怎么理解呢 ??

    //只是通配符检索别名: 不存在user2开头的别名, 不会报错(返回状态200, 空json)
    GET /_alias/user2*?allow_no_indices=false
     
    //检索不存在的user2, 以及user2开头的别名时, 一定会报错(404 + 错误信息json)
    GET /_alias/user2?allow_no_indices=true
    GET /_alias/user2,user2*?allow_no_indices=true
     
    //会报错 - 这个才是符合描述的(条件 expand_wildcards=closed)
    GET /_alias/user2*?allow_no_indices=false&expand_wildcards=closed
  • expand_wildcards:通配符查询时的范围限制. 支持多个条件的逗号分割.

    • all:默认, 匹配open和closed的索引, 包括隐藏的.
    • open:表示只查询开放中的索引
    • closed:只匹配closed的
    • hidden:隐藏的(hidden)索引, 必须和open/closed联合使用.
    • none:不接受通配符.
  • ignore_unavailable: (可选, bool) 如果有索引不存在时是否忽略。默认false,就是返回404并抛出错误信息。查询时只要有一个索引不存在,则都抛出错误。

  • local:是否仅从本地节点获取信息,默认false, 表示从master节点获取信息。如果设置为true, 则表示只从本地节点获取.

6.3.1、获取当前集群下的所有别名

返回所有索引, 无别名的显示空json:

    GET /_alias
    GET /_all/_alias
    GET /*/_alias
6.3.2、获取所有索引中有指定别名的

多个别名以英文逗号分割。

只要有一个别名不存在时抛出错误, 返回404状态, 以及能匹配到的部分索引

比如: 存在别名 user_12 和 2030, 不存在别名user_13

    GET /_alias/user_13

返回:

    {
      "error" : "alias [user_13] missing",
      "status" : 404
    }

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值