用python实现删除ES的索引

 

  1. 定义了一个名为delete_index的函数,它接受一个索引名称列表作为参数,遍历列表并对每个索引执行如下操作:

    • 检查该索引在Elasticsearch集群中是否存在。
    • 如果存在,则调用indices.delete方法删除该索引。
  2. 定义了要删除的索引前缀列表prefixes

  3. 计算上一年的年份(基于当前日期),然后生成一个包含上一年所有月份的元组列表all_months

  4. 遍历all_months中的每一对年份和月份,以及给定的前缀列表,构造符合指定格式的索引别名,并尝试获取对应的索引。若成功获取到索引,则调用delete_index函数删除它们。

  5. 判断当前是否已超过今年的第一个月,如果是,则计算出今年的前几个月份,并执行与上述相同的删除逻辑。

总之,此段代码的目标是定期清理存储在Elasticsearch集群中按特定命名规则(如"cr-all-YYYY.MM."、"cr-in-YYYY.MM." 和 "cr-stat-YYYY.MM.*")组织的历史数据索引。

# -*- coding: utf-8 -*-
# @Time    : 2024/1/5 10:23
# @Author  : hjcui
# @Site    : 
# @File    : Dele_ES_Index.py
# @Software: PyCharm
# -*- coding: utf-8 -*-
from datetime import datetime, timedelta
from elasticsearch import Elasticsearch

ips = [
    '192.168.0.141',
    '192.168.0.147',
    '192.168.0.148',
    '192.168.0.149',
    '192.168.0.150'
]
port = '9200'
IP_Port = [f"{ip}:{port}" for ip in ips]
conn_dbs = Elasticsearch(IP_Port)

def delete_index(indexes):
    for index_name in indexes:
        if conn_dbs.indices.exists(index=index_name):
            conn_dbs.indices.delete(index=index_name)

prefixes = ['cr-all', 'cr-in', 'cr-stat']

# 获取前一年的所有月份(包括闰年)
last_year = datetime.now().year - 1
all_months = [(last_year, m) for m in range(1, 13)]

# 删除上一年后半年以及前半年的索引
for year, month in all_months:
    for prefix in prefixes:
        index_pattern = f"{prefix}-{year}.{month:0>2}.*"
        indices = conn_dbs.indices.get_alias(index=index_pattern)
        
        # 使用items()判断非空字典更为简洁,但此处直接检查indices本身即可
        if indices:
            delete_index(indices.keys())

# 如果需要删除当前年的前几个月(例如1月至当前月),可以添加如下代码:
current_month = datetime.now().month
if current_month > 1:
    for prefix in prefixes:
        for i in range(1, current_month):
            index_pattern = f"{prefix}-{datetime.now().year}.{i:0>2}.*"
            indices = conn_dbs.indices.get_alias(index=index_pattern)
            if indices:
                delete_index(indices.keys())

你可能感兴趣的:(python,开发语言)