如果所有数据只存在一个索引下,随着数据积累,索引体积越来越大。为了方便管理ES索引,尽量将数据分散到多个索引里。在ES5.0以后新增了一个rollover API,可以动态的滚动索引。简单记录一下调研与使用情况。

参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/6.1/date-math-index-names.html

https://www.elastic.co/blog/managing-time-based-indices-efficiently

https://www.elastic.co/guide/en/elasticsearch/reference/6.1/date-math-index-names.html

一、     通过别名对相关索引统一管理(实现读写、操作的可分离):

1、 先设置索引模板(根据index template API):

2、 索引名根据时间工具生成,别名格式:

例:

curl -XPUT 'localhost:9200/%3Ctest%7Bnow%2FD%7D-1%3E'

等同于下面的:

curl -XPUT 'localhost:9200/test20180101

别名:

3、(ES版本5.0以上)通过调用RollOver接口结合时间工具,实现索引的按日期动态滚动。

curl -XPOST 'localhost:9200/in_test/_rollover?pretty' -H 'Content-Type: application/json' -d'

{

  "conditions": {

  "max_age":   "30d",

  "max_docs":  1000000,

  "max_size":  "500gb",

  }

}

'

如果系统中需要按月生成新索引或者当文档数达到100万条、索引大小达到500G时生成新索引,可以采用上面的命令。

30d—如果索引创建时间大于等于30天时滚动生效,1000000—1000000条数据,500gb—索引文件大小500GB(max_size参数在5.6.4不支持,推测为6.x版本里的新增的参数)

注:rollover API 有两种调用方式:

1)、不指定新的索引名字:(这种情况对于索引名字有一定要求,索引名字需要以数字结尾 例如: index_name-1。每次调用rollover API新的索引名字会自动+1)

 

 

2)、指定新的索引名

 4、定时调用rollover API即可。

二、管理index更灵活,效率也比较高(例如要删除历史数据,只需将旧index整个删除即可,比_delete_by_query效率高很多且不会引起冲突)。一般来说这种方式会配合shrink index一起使用,即索引的压缩。后期补充