python清除一个月以前的ES索引文档数据
先查看一下mysql 数据,看一下那一列是日期字段
看到是 edittime 列

以下是 python 脚本
vim delete_old_noticeresult.py
import datetime
from elasticsearch import Elasticsearch, RequestError
import logging
logging.basicConfig(filename='/var/log/es-index/delete_old_bidnotice.log', level=logging.INFO, format='%(asctime)s - %(message)s')
def delete_old_documents():
try:
now = datetime.datetime.now()
logging.info("Current date and time: %s", now)
one_month_ago = now - datetime.timedelta(days=30)
logging.info("Date and time one month ago: %s", one_month_ago)
es = Elasticsearch(['http://127.0.0.1:9200'])
logging.info("Elasticsearch client created.")
delete_query = {
"query": {
"range": {
"edittime.raw": {
"lt": one_month_ago.strftime("%Y-%m-%dT%H:%M:%SZ")
}
}
}
}
logging.info("Delete query constructed: %s", delete_query)
response = es.delete_by_query(index='noticeresult', body=delete_query, wait_for_completion=True)
logging.info("Delete request sent. Response: %s", response)
except RequestError as e:
logging.error("Error deleting documents: %s", e)
if __name__ == "__main__":
delete_old_documents()
# 安装 模块
pip install elasticsearch
# 创建存放日志目录
mkdir /var/log/es-index/
创建索引命令
PUT /noticeresult
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"analysis": {
"analyzer": {
"htmlStripAnalyzer": {
"filter": ["lowercase", "classic", "trim"],
"char_filter": ["html_strip"],
"type": "custom",
"tokenizer": "standard"
},
"chinese_analyzer": {
"type": "custom",
"tokenizer": "ik_max_word" // 使用 IK 分词器进行中文分词
}
},
"char_filter": {
"html_strip": {
"type": "html_strip"
}
},
"tokenizer": {
"ik_max_word": {
"type": "ik_max_word"
}
}
}
},
"mappings": {
"dynamic": "true",
"_source": {
"excludes": [
"fujcontent",
"projdetail"
]
},
"date_detection": false,
"numeric_detection": false,
"properties": {
"results_id": {
"type": "integer",
"fields": {
"raw": {
"type": "keyword",
"null_value": "NULL",
"ignore_above": 256
}
}
},
"notice_num": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"null_value": "NULL",
"ignore_above": 256
}
}
},
"organ": { "type": "text", "analyzer": "htmlStripAnalyzer" },
....
....
"editip": { "type": "text", "analyzer": "htmlStripAnalyzer" }, // 使用中文分析器
"editname": { "type": "keyword" },
"putip": { "type": "keyword" },
"edittime": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"null_value": "NULL",
"ignore_above": 256
}
}
},
....
....
"urlhost": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"null_value": "null",
"ignore_above": 256
}
}
},
"attachment_info": { "type": "integer" }
}
}
}
创建索引时查看 edittime 字段的映射,这个字段是 text 类型,并且有一个 raw 子字段,类型是 keyword。
这意味着你可以在查询中使用 edittime.raw 来进行精确匹配查询。
对应上 上方 python 的精确匹配。
执行结果