ElasticSearch的REST APIs之: 索引管理(上)

ElasticSearch的REST APIs之: 索引管理(上),第1张

ElasticSearch的REST APIs之: 索引管理(上)

基于ES 7.7, 官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/7.7/indices.html#indices

0x00 创建索引 (Create Index)

官方文档

PUT /
{
	"settings":{},
	"mappings":{}
	"alias": {}
}

可以包含3个 *** 作: 索引的设置(settings), 字段映射(mappings), 别名(alias).

这三个 *** 作(配置)都是可选的. mapping可以不指定, 让系统在数据导入的时候自动生成(但是建议手动设置, 就像我们在mysql中定义表的栏位一样).

索引的命名规则
  • 字母必须小写
  • 不能包含: 反斜杠 ( ), 斜杠( / ), 星号( * ), 问号( ? ), 双引号( " ), 大于号小于号( > < ), 竖线( | ), 空格(space character), 逗号( , ), 井号( # )
  • 不能以横线 ( - ), 下划线 ( _ ) , 加号( + )开头
  • 不能设置为 . 或者 ..
  • 长度限制255个字节(多字节字符, 比如汉字, 一个字符占多个字节, 总字节数限制255)
  • 除了隐藏的索引和插件管理的内部索引, 不建议使用 点 ( . )开头

7.0版本以前允许使用冒号分隔符(:), 但是在7.0+版本中被遗弃, 不再被支持

合法的index命名, 比如: myindex, myindex-001, myindex_001, shop.logs, 3dogs

不合法的命名, 比如: shopLists, _logs, shop:logs

下划线( _ )是系统保留使用的, 比如命令 "GET /_cat/indices" 中的 "_cat", 用于系统识别这个是index的名字还是命令. kibana会自动建立 .kibana_1, .kibana_task_manager_1两个索引

查询参数
PUT /myindex?wait_for_active_shards=1&master_timeout=30s&timeout=30s

7.0.0中已经取消了include_type_name

wait_for_active_shards

(可选,字符串) *** 作之前必须处于活动状态的分片副本数。

可以设置为all, 或者任何不超过分片总数的正整数(副本数量+1)。

默认值是1, 表示主分片(primary shard)。 更多资料参考文档

master_timeout

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

必须加时间单位, 包括: 天 d, 时 h, 分 m, 秒 s, 毫秒 ms, 微秒 micros, 纳秒 nanos

timeout

(可选,时间单位) 等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。

请求的body

aliases

(可选, object of objects) 索引的(多个)别名.

PUT /test
{
  "aliases": {
    "alias_1": {},
    "alias_2": {
      "filter": {
        "term": { "user.id": "kimchy" }
      },
      "routing": "shard-1"
    }
  }
}

名称也支持 "日期计算"(date math)

PUT /logs
{
  "aliases": {
    "": {}
  }
}

settings

(可选, index setting object) 索引的配置选项, 更多请参考文档

PUT /my-index-000001
{
  "settings": {
    "index": {
      "number_of_shards": 3,
      "number_of_replicas": 2
    }
  }
}
  • number_of_shards: 分片数量, 默认是1

  • number_of_replicas: (主分片的)副本数量, 默认是1。本地开发环境不需要副本可以设置为0。只能在创建索引的时候设置, 或者在索引close的时候修改

不需要在settings部分显式的声明index节点, 上面的代码可以简写为:

PUT /my-index-000001
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

也可以写成:

PUT /my-index-000001
{
  "settings": {
    "index.number_of_shards": 3,
    "index.number_of_replicas": 2
  }
}

你可能还需要修改返回的记录结果数的最大值(_search时的参数 from + size), 这个就是index.max_result_window, 默认值是10000, 搜索结果中超出这个offset值的文档不会显示, 且记录数量也会显示成:

    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },

更多请参考官方文档: Index modules

mappings

(可选, mapping对象) 索引的字段的映射. 包括: 字段名, 字段类型, 映射参数

PUT /test
{
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "field1": { "type": "text" }
    }
  }
}

别名也支持 "日期计算"(date math):

PUT /logs
{
  "aliases": {
    "": {}
  }
}



0x01 删除索引 (Delete index)

官方文档

DELETE/

删除索引时会删除文档(documents), 分片(shards)和元数据(metadata)。但不会删除Kibana相关的组件, 比如 索引模式(index patterns), 可视化(visualizations)或仪表板(dashboards)。

You cannot delete the current write index of a data stream. To delete the index, you must roll over the data stream so a new write index is created. You can then use the delete index API to delete the previous write index. 这段还没理解是啥意思

参数
  1. 同时删除多个索引: 逗号分割的列表(不能使用别名)
PUT index1
PUT index2
PUT index3
DELETE /index1,index2,index3
  1. 删除所有索引, 可以使用 _all 或 者通配符*, 注意: 这个 *** 作很危险!!!

如果要禁止使用_all或者通配符*删除索引(换句话说, 就是: 删除时必须指定索引名称), 可以把集群的动态参数action.destructive_requires_name 设置为true




0x02 获取索引

可以获取一个或多个索引的元数据(metadata)信息, 包括:别名(aliases)、映射(mappings)、设置(settings)。

GET /test2
GET /test2,test3
GET /test*

7.0.0版本之前, mappings的返回数据会包含一个type name, 现在默认不返回了,但是仍然可以通过添加参数include_type_name来获取: GET /test2?include_type_name=true. 实际测试发现, 也只是在mappings和properties层级之间加了一层_doc

查询参数

allow_no_indices

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

这个是和参数 expand_wildcards 一起使用时的描述

比如有test但是没有cc开头的索引, 参数 allow_no_indices 为false:

# 没有cc开头的: 不管 expand_wildcards 设置为哪个值, 都返回404状态并抛出错误信息
GET /cc*?allow_no_indices=false
GET /cc*?allow_no_indices=false&expand_wildcards=closed

# 有test开头的:  不管 expand_wildcards 设置为哪个值, 都返回404状态并抛出错误信息
GET /test*,cc*?allow_no_indices=false
GET /test*,cc*?allow_no_indices=false&expand_wildcards=closed

上面的代码中, 即使已经存在了test开头的索引, 但是不存在cc开头的索引, 当参数allow_no_indices设置为false时, 一样也会返回404状态, 并抛出错误信息.

如果设置true, 则第一个查询返回"{}", 第二个返回所有test开头的索引.

所以, 我们老老实实使用默认的设置true就好了.

expand_wildcards 通配符查询时的范围限制

  • open: 默认, 表示只查询开放中的索引
  • all: 匹配任何数据流(data stream)或索引, 包括隐藏的.
  • closed: 关闭的(closed)且是非隐藏(non-hidden)的索引, 以及非隐藏的数据流(data stream).
  • hidden: 隐藏的(hidden)的数据流(data stream)和索引, 必须和open/closed联合使用.
  • none: 不接受通配符.

flat_settings 是否以平面格式返回settings信息.

默认 false, 以对象形式返回settings信息. 设置为true后, 显示如下:

    "settings" : {
      "index.creation_date" : "1634289521728",
      "index.number_of_replicas" : "1",
      "index.number_of_shards" : "1",
      "index.provided_name" : "test",
      "index.uuid" : "2E0lhbEFQ3KxdKCTwx7FWw",
      "index.version.created" : "7070099"
    }

include_defaults 返回的settings中是否包含默认设置, 默认是 false

ignore_unavailable 如果有索引不存在时是否忽略.

默认false, 就是返回404并抛出错误信息. 查询时只要有一个索引不存在, 则都抛出错误.

# 索引test2存在, cc不存在
# 默认会抛出错误
GET /test2,cc
# 忽略错误, 会返回test2的信息
GET /test2,cc?ignore_unavailable=true

local 是否仅从本地节点获取信息

默认false, 表示从master节点获取信息.

master_timeout 连接到master节点的超时时间, 默认 30s

如果有索引不存在, 则返回信息中只显示第一个不存在的索引的名称

官方文档




0x03 Exists

检查 一个数据流(data stream)、索引或其别名 是否存在.

HEAD /myindex
HEAD /my_data_stream

查询参数" allow_no_indices, expand_wildcards,ignore_unavailable, local" 定义与 GET *** 作一样.

官方文档(包括最新的7.15)中还说有"flat_settings, include_defaults"这两个参数, 因为只返回状态, 不返回索引的信息, 所以他们没有意义.

返回状态码:

  • 200: 所有目标都存在
  • 404: 只要有一个目标不存在

HEAD *** 作只返回状态码, response body为空。 这与GET返回404时还有response body不同

0x04 Close index

关闭一个索引.

POST //_close

例如:

POST /test2/_close

返回值: 不管该索引当前是否是open的状态, 返回状态都是200, acknowledged为true

# 正常返回
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "indices" : {
    "test2" : {
      "closed" : true
    }
  }
}
# 如果索引已经是close状态, 则返回:
{
  "acknowledged" : true,
  "shards_acknowledged" : false,
  "indices" : { }
}
0x05 Open index

重新打开一个关闭的索引.

如果是数据流(data streams), 该api会打开任何关闭的后备索引(backing indices).

数据流(data streams)由一个或多个 hidden 的自动生成的后备索引(Backing indices)组成: 参考官方blog Data stream 在索引生命周期管理中的应用

POST //_open

不管目标索引是closed还是open, 都会返回成功状态 200 及内容:

{
    "acknowledged": true,
    "shards_acknowledged": true
}

下一篇, 从分片的 收缩/分割/克隆 继续: https://my.oschina.net/abensky/blog/5281925

last updated at 2021/10/23 14:30

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5606061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存