0x00 创建索引 (Create Index)基于ES 7.7, 官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/7.7/indices.html#indices
官方文档
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。
请求的bodyaliases
(可选, 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. 这段还没理解是啥意思
- 同时删除多个索引: 逗号分割的列表(不能使用别名)
PUT index1 PUT index2 PUT index3 DELETE /index1,index2,index3
- 删除所有索引, 可以使用 _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: 只要有一个目标不存在
0x04 Close indexHEAD *** 作只返回状态码, response body为空。 这与GET返回404时还有response body不同
关闭一个索引.
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)