python清除一个月以前的ES索引文档数据

news2024/11/16 3:20:18

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)
        
        # 创建 Elasticsearch 连接
        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")  # 格式化日期为Elasticsearch支持的格式
                    }
                }
            }
        }
        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/

1.在删除操作中,由于 edittime 是 text 类型,直接对 edittime 字段进行范围查询可能会导致不准确的结果。应该使用 edittime.raw 字段来进行精确的范围查询。

2.日期格式:确保 edittime.raw 的格式与你的 Elasticsearch 索引中字段的实际格式一致。如果字段没有 .raw 后缀,请移除它。
3.索引名称:确认 noticeresult 是你要删除文档的正确索引名称。
4.时间戳格式:two_months_ago.strftime(“%Y-%m-%dT%H:%M:%SZ”) 是正确的日期格式。
5.日志路径:确保 /var/log/es-index/delete_old_noticeresult.log 路径存在,并且你的脚本有写权限。
6.Elasticsearch 配置:如果 Elasticsearch 需要认证或其他配置,请在 Elasticsearch 实例创建时提供相应参数。
7.异常处理:可以进一步捕获和处理其他可能的异常(如连接失败)。

创建索引命令

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 的精确匹配。

执行结果

python delete_old_noticeresult.py

2024-09-13 14:52:29,292 - Current date and time: 2024-09-13 14:52:29.292836
2024-09-13 14:52:29,293 - Date and time one month ago: 2024-08-14 14:52:29.292836
2024-09-13 14:52:29,296 - Elasticsearch client created.
2024-09-13 14:52:29,296 - Delete query constructed: {‘query’: {‘range’: {‘edittime.raw’: {‘lt’: ‘2024-08-14T14:52:29Z’}}}}
2024-09-13 14:52:29,657 - POST http://127.0.0.1:9200/noticeresult/_delete_by_query?wait_for_completion=true [status:200 duration:0.360s]
2024-09-13 14:52:29,658 - Delete request sent. Response: {‘took’: 353, ‘timed_out’: False, ‘total’: 0, ‘deleted’: 95, ‘batches’: 0, ‘version_conflicts’: 0, ‘noops’: 0, ‘retries’: {‘bulk’: 0, ‘search’: 0}, ‘throttled_millis’: 0, ‘requests_per_second’: -1.0, ‘throttled_until_millis’: 0, ‘failures’: []}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《C++》解密--顺序表

一、线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈...... 线性表在【逻辑上】是线性结构…

构建“零工市场小程序”,服务灵活就业“大民生”

如今,灵活就业已成为现代劳动力市场的重要组成部分。然而,这一就业形态也面临着信息不对称、匹配效率低下等一系列挑战。为有效解决这些问题,构建一个高效、便捷的“零工市场小程序”显得尤为重要。 二、零工市场现状与挑战 市场规模与增长趋…

单调队列的实现

这是C算法基础-数据结构专栏的第二十五篇文章,专栏详情请见此处。 引入 单调队列就是满足单调性的队列,它最经典的应用就是给定一个序列和一个窗口,使窗口在序列中从前向后滑动,求出窗口在每个位置时,其中元素的最大/小…

DC_(n)Xyz

intra-band contiguous EN-DC 配置需要通过DC_(n)Xyz表示,其中第一个字母y表示contiguous E-UTRA carriers数量,第二个字母z表示contiguous NR carrier数量,而(n)X 就代表 E-UTRA band X 和NR band nX这个组合。上图38.101-3 Table 5.3B.0-1 …

Unity同时启动多个Editor

HardLinkShellExt tool https://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html 作用: 1.网络Online项目方便调试,MMO项目 2.方便发布不同平台的包,快速开发测试 使用方法:

网络药理学:2、文章基本思路、各个数据库汇总与比对、其他相关资料(推荐复现的文章、推荐学习视频、论文基本框架、文献基本知识及知网检索入门)

一、文章基本思路(待更) 一篇不含分子对接和实验的纯网络药理学文章思路如下: 即如下: 二、 各个数据库(待更) 三、其他相关资料 1.推荐复现的文章 纯网络药理学分子对接:知网&#xff1…

Java 每日一刊(第6期):整数运算

文章目录 前言Java 的整数类型基本的整数运算符整数除法与取模自增与自减运算整数的进制表示整数溢出问题位运算整数的优化技巧类型自动提升(Type Promotion)强制类型转换(Type Casting)本期小知识 在有限的符号中,我们…

【开放词汇检测】基于MMDetection的MM-Grounding-DINO实战

文章目录 摘要安装基础环境新建虚拟环境安装pytorch安装openmim、mmengine、mmcv安装 MMDetection验证安装配置OV-DINO环境 MMDetection的MM-Grounding-DINO详细介绍测试结果Zero-Shot COCO 结果与模型Zero-Shot LVIS ResultsZero-Shot ODinW(野生环境下的目标检测&…

Android视频编辑:利用FFmpeg实现高级功能

在移动设备上进行视频编辑的需求日益增长,用户期望能够在智能手机或平板电脑上轻松地编辑视频,以满足社交媒体分享或个人存档的需求。Android平台因其广泛的用户基础和开放的生态系统,成为视频编辑应用的理想选择。FFmpeg,作为一个…

Centos7安装MySql(特详细)

文章目录 前言一、mysql下载1.打开mysql官网,找到download2.打开MySQL Community(GPL) Downloads3.打开MySql Community Server4.打开Archives5.下载 二、安装1.文件上传2.文件解压3.配置文件4.添加环境变量5.初始化6.启动7.登录并修改密码8.允许远程连接 前言 每次…

【人工智能】OpenAI发布GPT-o1模型:推理能力的革命性突破,这将再次刷新编程领域的格局!

在人工智能领域,推理能力的提升一直是研究者们追求的目标。就在两天前,OpenAI正式发布了其首款具有推理能力的大语言模型——o1。这款模型的推出,不仅标志着AI技术的又一次飞跃,也为开发者和用户提供了全新的工具来解决复杂问题。…

51单片机快速入门之独立按键

51单片机快速入门之独立按键 这里我们需要用上一个仿真软件,只因不想硬件焊接:PROTEUS DESIGN SUITE PROTEUS DESIGN SUITE: PROTEUS DESIGN SUITE是一款由LabCenter Electronics开发的电子设计自动化(EDA)软件,广泛应用于电气工程和电子工…

debian服务器上搭建git服务及添加文件提交拉取的操作记录、在Ubuntu上搭建Jenkins服务以及Ubuntu中的PPA源及PPA的安装使用

一、debian服务器上搭建git服务及添加文件提交拉取的操作记录 需要新建一个代码仓库,准备找台业务量不大的服务器上找个空间大的文件夹搭建一个。整个过程: 1,在服务器端安装git服务,新建git用户并设置密码,创建仓库&a…

深度学习-神经网络

文章目录 一、基本组成单元:神经元二、神经网络层三、偏置与权重四、激活函数1.激活函数的作用2.常见的激活函数1).Sigmoid2).Tanh函数3).ReLU函数 五、优点与缺点六、总结 神经网络(Neural Network, NN)是一种模拟人类大脑工作方式的计算模型…

北大阿里:新出炉的LLM偏好对齐方法综述

最近大家都聚集在 Open AI 新的🍓o1发布和 self-play RL 的共识上。 我想不管是草莓、self-play RL还是数据合成下的new scaling law,也不论这条路是否能够最终走通,仅对于当下以及未来LLM在偏好对齐来说,如文中所述,相…

C语言 | Leetcode C语言题解之第402题移掉K位数字

题目&#xff1a; 题解&#xff1a; char* removeKdigits(char* num, int k) {int n strlen(num), top 0;char* stk malloc(sizeof(char) * (n 1));for (int i 0; i < n; i) {while (top > 0 && stk[top] > num[i] && k) {top--, k--;}stk[top]…

【SSRF漏洞】——http协议常见绕过

改变的确很难&#xff0c;但结果值得冒险 本文如有错误之处&#xff0c;还请各位师傅指正 一.ssrf概述 SSRF全称为Server-side Request Fogery,中文含义服务器端请求伪造 SSRF是一种由攻击者构造形成由目标服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF攻击的目标…

Qt常用控件——QLineEdit

文章目录 QLineEdit核心属性和信号基本示例正则表达式约束验证输入密码是否一致密码显示状态切换 QLineEdit核心属性和信号 QLineEdit用来表示单行输入&#xff0c;可以输入一段文本&#xff0c;但是不能替换 核心属性&#xff1a; 属性说明text输入框中的文本inputMask输入…

Java后端程序员简单操作Linux系统命令

Linux系统概述 Linux 内核最初是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上 学时而编写的一个开源的操作系统。 Linux&#xff08;管理计算机硬件资源&#xff0c;任务调度&#xff09;支持多用户&#xff0c;支持网络&#xff0c;支持多线…

一次开发,多端部署--实例二

一、视觉风格 1、分层参数 使用了分层参数后&#xff0c;当系统切换深色模式时&#xff0c;字体和背景也可以自适应。 Row() {Column() {Text(分层参数)// 分层参数在sysResource包&#xff0c;属于系统参数&#xff0c;全局可用.fontColor($r(sys_color.ohos_id_color_text_pr…