基于ES 7.7, 官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/7.7/indices.html#indices
传送门: 上篇: create, delete, get, exists, close, open, 中篇: shrink, split, clone
0x09. 滚动 (Rollover)2021/10/21 今天出了7.16banben,然后原7.x版本(7.0 ~ 7.14)的链接都变了, 后面的x必须指定版本, 否则404
官方文档
滚动, 为数据流(data streams, , ES7.9+ )或索引别名创建一个新的索引.
数据流是可以跨多个索引存储仅限于追加存储的时间序列数据,同时为请求提供单个命名资源。在 ES 7.9之前,通常会使用带写索引权限的索引别名来管理时间序列数据。数据流取代了这一功能,需要更少的维护,并自动与数据层集成。所以可以把数据流看作是带有写索引权限的索引别名的升级特性。参考官方文档Data streams, 或 Data streams中文详解
POST /描述/_rollover POST / /_rollover/
推荐使用 ILM的rollover去自动完成rollover操作. 详见Index lifecycle
rollover会为数据流或索引别名创建新索引。该API的行为取决于要rollover的目标对象.
滚动数据流(Data streams)对数据流rollover,会为它创建一个新的写索引(write index), 而它原来的写索引则编程常规的后备索引(backing index)。rollover也会增加数据流的generation(一个六位数的零填充整数, 作为rollover的累积计数, 从000001开始). 见Rollover
滚动一个指向多个索引的索引别名 (Roll over an index alias with a write index)ES 7.9版本之前, 你需要给一个写索引加别名(index alias with a write index)来管理时间序列数据(time series data). 而Data streams取代了这一功能, 需要更少的维护,并自动与数据层(data tiers, ES7.10+))集成. 参考把索引别名转换为数据流(convert-index-alias-to-data-stream, ES7.9+).
如果一个索引别名指向多个索引,其中一个索引必须是写索引。rollover为这个索引别名创建一个新的写索引(通过设置is_write_index为true), 同时将之前的写索引的is_write_index设置为false。
滚动只有一个索引的索引别名 (Roll over an index alias with one index)如果rollover一个只指向一个索引的索引别名, 则会为该别名创建一个新的索引, 并从别名中删除原始索引(TODO 这句话暂时未理解...).
别名的自增 (Increment index names for an alias)rolloever索引别名时,可以为新索引指定名称。如果未指定名称,且当前索引以-和数字结尾,例如my-index-000001或my-index-3,则新索引名称将增加该数字。例如,如果要rollover的索引别名的当前索引名称为my-index-000001,则将创建一个名为my-index-000002的新索引。无论上一个索引的名称如何(后面的数字是多少),该数字始终是(左边)零填充的6个字符。
将日期计算(date math)用于索引别名的rollover
If you use an index alias for time series data, you can use date math in the index name to track the rollover date. For example, you can create an alias that points to an index named
如果对时间序列数据(time series data)使用索引别名,则可以在索引名称中使用日期计算(date math)来跟踪滚动日期。例如,你可以创建一个别名,指向名为
滚动将创建一个新的索引, 且受制于wait_for_active_shards设置.
查询参数- dry_run boolean, 可选, 默认false. 如果为true,则只检查当前索引是否匹配一个或多个指定的条件(conditions),而不执行滚动操作.
- wait_for_active_shards
- master_timeout
- timeout
除了 alias, mappings, settings之外, 还有一个conditions.
conditions:
滚动的条件。如果指定了条件,则ES仅在当前索引满足一个或多个条件时执行滚动。如果未指定此参数,则ES将无条件执行滚动。
注意: 要触发滚动, 在执行请求时当前索引必须满足这些条件. 在api返回后ES不会监控该索引. 如果需要自动滚动, 请使用 ILM的rollover代替
- max_age
时间单位, 可选。自索引创建时间起经过了max_age时间后触发滚动。即使索引起始(origination)日期配置为自定义日期,例如设置了index.lifecycle.parse_origination_date或index.lifecycle.origination_date, 也始终会计算从触发器建立开始所经过的时间.
-
max_docs 整数, 可选。当文档数量达到最大数值时触发滚动。这个数量不包括自上次refresh后新增的文档,也不包括副本分片中的文档。
-
max_size
字节单位, 可选。当索引大小达到设置时触发滚动。这个大小包含所有的主分片, 不包含副本分片。
可以使用 GET /_cat/indices/
查看当前索引的大小, 返回的列分别是: health, status, index name, uuid, primary shards, replicas shards, docs.count, docs.deleted, store.size, pri.store.size. 最后一列pri.store.size表示主分片的合并大小.
- max_primary_shard_size
字节单位, 可选。当最大的一个主分片的大小达到设置时触发滚动。这个值是该索引的最大的一个主分片的大小, 不计算副本分片的大小。
0x0a. Freeze / Unfreeze index
freeze 和 unfreeze 从 ES 7.14 版本开始废弃. 因为7.7版本显著的降低了堆内存(heap memory, 主要是给Lucene存储磁盘文件位置信息, 1GB的索引文件大概只需要几MB)的使用
# 冻结索引 POST /freeze index ( 冻结索引 )/_freeze # 解冻索引 POST / /_unfreeze
冻结索引操作对集群来说,除了要修改内存中的元数据(metadata),基本没有开销。冻结后,索引是只读的(read-only),类似 docs-index_或 force_merges 的写操作都被阻止。
数据流(data stream)的写索引(write index)是不能冻结的. 如果要冻结, 必须先执行滚动(rollover)操作来生成一个新的写索引.
unfreeze index (解冻索引)注意: 冻结索引会导致短时间内primaries不被挂载(not be allocated)且集群状态变成green, 直到primaries被重新挂载. 这个限制可能在未来的版本中移除.
当被冻结的索引被解冻时,该索引将经过正常的恢复过程,重新变为可写状态.
0x0b. Resolve index
ES7.9 版本才开始提供这个接口 !!!
解析索引(indices)、别名(alias)和数据流(data stream)的指定名称和/或索引模式(index patterns)。 支持多种模式和远程集群。
需要 view_index_metadata 或者 管理(manage) index privilege 的权限.
GET /_resolve/index/
使用通配符(*)查询时可以带一个参数: expand_wildcards
- all: 匹配所有open和closed的索引, 包含hidden的索引
- open: 默认值, 只匹配open的索引
- clsoed: 只匹配closed的索引
- hidden: 只匹配hidden的索引
- none: 不接受通配符查询
GET /_resolve/index/f*,remoteCluster1:bar*?expand_wildcards=all
last updated at: 2021/10/21 14:15 修正链接中的版本号7.x为指定版本



