方案二 : 热点数据单独索引,历史数据按时间进行索引 常用数据切分方案参考: Sizing Elasticsearch

下面重点介绍下“基于时间的索引” ( time-based indices ) 的相关技巧

1、如何选择划分的时间范围

根据数据的增长速度不同 可以按天(索引名类似2019-09-24),按月(索引名类似2019-09),按年(索引名类似2019)进行划分

2、设计一个索引模板

对于我们业务来说,其实每个索引除了索引名称不同以外,其他的都是一样的,所以我们可以设计一个模板,用于每次索引的创建。这里需要用到就 ES 的 Index Templates 机制。

Index Templates 的基本原理是:首先预定义一个或多个 “索引模板”(index template,其中包括 settings 和 mappings 配置);然后在创建索引时,一旦索引名称匹配了某个 “索引模板”,ES 就会自动将该 “索引模板” 包含的配置(settings 和 mappings)应用到这个新创建的索引上面。

以业务为例,假设我们的 ES 索引需求如下:

按越索引(索引名称形如 business-2019-09)

每天的数据按所属的月份存入对应月份的索引

搜索的时候,希望搜索范围是所有的索引(借助 alias)

基于上述索引需求,对应的 “索引模板” 可以设计为:

$ curl -XPUT http://localhost:9200/_template/business_template -d'{
  "template": "business-*",
  "settings": {
    "number_of_shards": 1
  "mappings": {
    "log": {
      "dynamic": false,
      "properties": {
        "content": {
          "type": "string"
        "created_at": {
          "type": "date",
          "format": "dateOptionalTime"
  "aliases": {
    "search-business": {}
复制代码
说明:

创建索引时,如果索引名称的格式形如 “business-*”,ES 会自动将上述 settings 和 mappings 应用到该索引

aliases 的配置,告诉 ES 在每次创建索引时,自动为该索引添加一个名为 “search-business” 的 alias(别名)

索引与搜索

基于上述 “索引模板” 的设计,索引与搜索的策略就很直接了。

索引策略 :每天的数据,只索引到当月对应的索引。比如,2019 年9 月 24 日这天的数据,只索引到 business-2019-09 这个索引当中。

搜索策略 :因为搜索需求是希望全量搜索,所以在搜索的时候,索引名称使用 “search-business” 这个 alias 即可。

更多关于 “如何有效管理基于时间的索引” 的技巧,可以参考 Managing Elasticsearch time-based indices efficiently

分类:
后端
标签: