Elasticsearch 基础教程

Elasticsearch 高级教程

Elasticsearch 插件

Elasticsearch 笔记

Elasticsearch(es)索引零停机(无需重启)无缝平滑切换的方法

es(elasticsearch) 索引管理详解 es(elasticsearch) 索引管理详解


在 Elasticsearch(es)的实际使用中,我们往往需要每天对索引数据进行增量更新和全量更新,如果当前程序使用的索引需要用新建的(可能是全量更新的),那么可以通过索引别名 alias 的方式进行索引无缝平滑切换,无需修改程序代码,平滑操作你可以理解是原子性的操作,应用端无感知。

具体方法

假设我们每天全量数据同步到 es 的问答索引名为 qa_20200501,这种带有日期后缀的形式,调用索引查询的指定索引名是 qa 即可,当每天切换到最新数据的索引时,只需将现有的索引别名映射删除,将新的索引映射到别名下即可,示例如下:

POST /_aliases
{    
  "actions": [
    { "remove": { "index": "qa_20200501", "alias": "qa" }},
    { "add": { "index": "qa_20200502", "alias": "qa" }}
  ]
}

索引别名本质上是一个快捷方式或软链接,并且它是一个原子性的操作

此外,应用中使用别名而不是索引名,这样你就可以在任何时候重建索引。

上述示例中多个操作用了 _aliases,还有单个操作的 _alias

需要注意的是,如果别名与索引是一对一的,使用别名索引文档或者查询文档是可以的,但是如果别名和索引是一对多的,使用别名会发生错误,因为 es 不知道把文档写入哪个索引中去或者从哪个索引中读取文档。