searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ES中已经存在的索引怎么增加时间划分

2024-12-12 09:10:55
45
0

使用索引别名和过滤器(Filter)进行逻辑划分

  • 原理
    • 索引别名是 Elasticsearch 中一个很有用的功能,它可以作为现有索引的一个替代名称来使用。通过为索引创建基于时间范围的别名,并在别名中应用过滤器,可以在逻辑上实现时间划分。虽然数据实际上还是存储在原来的索引中,但从查询的角度来看,就好像数据是按照时间划分存储的。
  • 步骤
    • 创建索引别名并添加过滤器
      • 假设已经有一个索引叫my_index,其中包含一个日期字段@timestamp。要创建按天划分的别名,例如为 2024 年 12 月 3 日的数据创建别名my_index_20241203,可以使用以下操作(通过 Elasticsearch 的 REST API 或者 Kibana 的 Dev Tools):
         POST _aliases
                 {
                   "actions": [
                     {
                       "add": {
                         "index": "my_index",
                         "alias": "my_index_20241203",
                         "filter": {
                           "range": {
                             "@timestamp": {
                               "gte": "2024-12-03T00:00:00",
                               "lt": "2024-12-04T00:00:00"
                             }
                           }
                         }
                       }
                     }
                   ]
                 }
      • 在这个操作中,actions部分指定了要执行的操作(这里是添加别名)。在add操作里,index指向原始索引my_indexalias是新创建的别名my_index_20241203filter部分使用range查询来筛选出@timestamp字段在 2024 年 12 月 3 日(从 0 点开始,到下一天 0 点之前)范围内的数据。
      • 查询使用别名
        • 当需要查询 2024 年 12 月 3 日的数据时,就可以使用别名my_index_20241203进行查询,就好像这些数据是存储在一个单独的按时间划分的索引中一样。例如:
               GET my_index_20241203/_search
                   {
                     "query": {
                       "match": {
                         "some_field": "some_value"
                       }
                     }
                   }
      • 这种方法的优点是不需要重新索引数据,速度快,但是对于一些复杂的操作(如数据删除,如果要按照时间范围删除数据,还是需要操作原始索引)可能会有一些限制。
0条评论
0 / 1000
朱****德
6文章数
0粉丝数
朱****德
6 文章 | 0 粉丝
原创

ES中已经存在的索引怎么增加时间划分

2024-12-12 09:10:55
45
0

使用索引别名和过滤器(Filter)进行逻辑划分

  • 原理
    • 索引别名是 Elasticsearch 中一个很有用的功能,它可以作为现有索引的一个替代名称来使用。通过为索引创建基于时间范围的别名,并在别名中应用过滤器,可以在逻辑上实现时间划分。虽然数据实际上还是存储在原来的索引中,但从查询的角度来看,就好像数据是按照时间划分存储的。
  • 步骤
    • 创建索引别名并添加过滤器
      • 假设已经有一个索引叫my_index,其中包含一个日期字段@timestamp。要创建按天划分的别名,例如为 2024 年 12 月 3 日的数据创建别名my_index_20241203,可以使用以下操作(通过 Elasticsearch 的 REST API 或者 Kibana 的 Dev Tools):
         POST _aliases
                 {
                   "actions": [
                     {
                       "add": {
                         "index": "my_index",
                         "alias": "my_index_20241203",
                         "filter": {
                           "range": {
                             "@timestamp": {
                               "gte": "2024-12-03T00:00:00",
                               "lt": "2024-12-04T00:00:00"
                             }
                           }
                         }
                       }
                     }
                   ]
                 }
      • 在这个操作中,actions部分指定了要执行的操作(这里是添加别名)。在add操作里,index指向原始索引my_indexalias是新创建的别名my_index_20241203filter部分使用range查询来筛选出@timestamp字段在 2024 年 12 月 3 日(从 0 点开始,到下一天 0 点之前)范围内的数据。
      • 查询使用别名
        • 当需要查询 2024 年 12 月 3 日的数据时,就可以使用别名my_index_20241203进行查询,就好像这些数据是存储在一个单独的按时间划分的索引中一样。例如:
               GET my_index_20241203/_search
                   {
                     "query": {
                       "match": {
                         "some_field": "some_value"
                       }
                     }
                   }
      • 这种方法的优点是不需要重新索引数据,速度快,但是对于一些复杂的操作(如数据删除,如果要按照时间范围删除数据,还是需要操作原始索引)可能会有一些限制。
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0