ElasticSearch删除索引中的数据(delete_by_query)

2023-05-16

1、删除两个月以前的数据

在 Elasticsearch 中,要删除两个月以前的数据,可以通过以下步骤:

计算当前时间的两个月前的日期,可以使用 Python 的 datetime 模块来实现。

import datetime

# 获取当前日期
now = datetime.datetime.now()

# 计算两个月前的日期
two_months_ago = now - datetime.timedelta(days=60)

构造 Elasticsearch 的删除请求,使用 Elasticsearch-Py 库来与 Elasticsearch 进行交互。

from elasticsearch import Elasticsearch

# 创建 Elasticsearch 连接
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

# 构造删除请求
delete_query = {
    "query": {
        "range": {
            "timestamp": {
                "lt": two_months_ago.strftime("%Y-%m-%dT%H:%M:%S")  # 格式化日期为 Elasticsearch 支持的格式
            }
        }
    }
}

# 发送删除请求
es.delete_by_query(index='your_index_name', body=delete_query)

        这样就可以删除索引中两个月以前的数据。需要注意的是,删除数据操作是不可逆的,请谨慎使用,并在生产环境中进行充分的测试。另外,具体的索引命名、字段名和日期字段名等需要根据你的实际情况进行修改。

2、通过别名删除数据

        可以使用 Elasticsearch 的别名(Alias)来一次性删除多个索引中的数据。别名可以理解为对一个或多个索引的引用,可以对别名进行删除操作,从而同时删除多个索引的数据。

下面是使用 Elasticsearch-Py 库来一次性删除多个索引中数据的示例代码:

from elasticsearch import Elasticsearch

# 创建 Elasticsearch 连接
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

# 定义要删除数据的索引别名
index_alias = "your_index_alias"

# 构造删除请求
delete_query = {
    "query": {
        "range": {
            "timestamp": {
                "lt": "now-2M"  # 删除两个月以前的数据
            }
        }
    }
}

# 发送删除请求,并指定索引别名
es.delete_by_query(index=index_alias, body=delete_query)

        在这个示例中,我们使用了 index_alias 变量来指定要删除数据的索引别名,然后通过 es.delete_by_query() 方法发送删除请求,并在其中指定了要删除的数据范围,这里使用了 Elasticsearch 的日期数学计算表达式 "now-2M" 来表示两个月以前的时间点。这样,所有与该别名关联的索引中两个月以前的数据都会被删除。

        需要注意的是,使用别名删除索引中的数据是一个强大的操作,务必谨慎使用,并在生产环境中进行充分的测试。同时,具体的索引别名和字段名等需要根据你的实际情况进行修改。

3、是否属于逻辑删除

        使用 Elasticsearch 的 delete_by_query 方法删除索引中的数据并不属于逻辑删除。它实际上是执行了一次查询操作,然后在查询结果的基础上执行删除操作,将满足查询条件的文档从索引中物理删除。

        逻辑删除通常是通过在文档中添加一个标志字段(例如 deleted),并将其设置为 true 表示被标记为删除,然后在查询时过滤掉这些标记为删除的文档,从而实现逻辑删除的效果。这样的做法可以保留已删除文档的历史记录,方便后续恢复或查询需求。

        而使用 delete_by_query 方法则是直接从索引中物理删除满足查询条件的文档,这些文档将无法被恢复,并且删除操作会在 Elasticsearch 中产生一定的开销和影响性能。因此,在使用 delete_by_query 方法时,需要谨慎考虑,并在生产环境中进行充分的测试和验证。

4、删除数据后是否还占用存储空间

        在 Elasticsearch 中,当使用 delete_by_query 方法删除文档时,这些文档实际上会被标记为已删除,但并不会立即从磁盘上删除。而是在后续的段合并(segment merge)操作中,才会将这些已删除的文档从磁盘上清除。

        因此,虽然使用 delete_by_query 方法删除了文档,但这些文档仍然会占用存储空间,直到段合并操作被触发并完成。这也意味着,即使使用 delete_by_query 方法删除了大量文档,磁盘上的存储空间并不会立即释放,而是需要等待段合并操作进行清理。

        在 Elasticsearch 7.x 及以上版本中,已经引入了新的 _delete_by_query API,它可以在删除文档时通过 refresh 参数进行实时刷新(默认情况下,Elasticsearch 会定期执行刷新操作以确保数据持久化到磁盘)。这样可以更快地释放存储空间,但仍然需要注意潜在的性能和存储影响。在使用 delete_by_query 方法时,建议在生产环境中谨慎操作,并在删除大量数据时密切监控存储空间的使用情况。

5、大数据存储使用delete_by_query方法是否有影响

        对于大量数据的删除,使用 delete_by_query 方法可能会对性能和存储空间造成一定的影响。因为 delete_by_query 方法需要在 Elasticsearch 中执行查询操作,并对匹配的文档进行标记删除,而这些标记删除的文档仍然会占用存储空间,并需要在后续的段合并操作中清理。

        对于大量数据的删除,推荐使用更高效的方法,例如通过删除整个索引或者使用 Elasticsearch 的时间戳索引(time-based index)来定期删除旧数据。这样可以避免使用 delete_by_query 方法对查询和存储空间造成过大的压力。

例如,可以考虑以下几种方法:

  • 删除整个索引:如果要删除的数据较为庞大且时间上有明确的范围,可以直接删除整个索引。例如,每个月一个索引,当某个索引中的数据超过两个月时,直接删除这个索引。
  • 使用 Elasticsearch 的时间戳索引:可以将数据按照时间戳等时间信息进行分散存储在不同的索引中,例如每天或每小时一个索引。当数据过期时,只需删除相应的索引,从而实现快速删除大量数据。

        以上方法都可以避免使用 delete_by_query 方法对性能和存储空间造成潜在的影响,适用于大量数据的删除场景。需要根据具体的业务需求和数据规模选择合适的删除策略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch删除索引中的数据(delete_by_query) 的相关文章

  • 利用OpenCV识别不规则图形轮廓并找其中心点和角度

    关于寻找图形的轮廓 xff0c 想来大家都不陌生 但平常寻找并进行识别的轮廓都是较为标准的图形 xff0c 如圆形 xff0c 矩形等 但在一些特殊情况下 xff0c 我们所检测的图形并不是理想的标准图形 比如说我们检测元件的引脚 xff0
  • 神经网络学习小记录21——InceptionV3模型的复现详解

    神经网络学习小记录21 InceptionV3模型的复现详解 学习前言什么是InceptionV3模型InceptionV3网络部分实现代码图片预测 学习前言 Inception系列的结构和其它的前向神经网络的结构不太一样 xff0c 每一
  • Ubuntu的快乐学习3——ros的launch用法

    Ubuntu的快乐学习3 ros的launch用法 学习前言launch是什么launch的使用方法一 简单使用二 常用标签1 launch标签2 node标签3 include标签4 remap标签5 param标签6 rosparam标
  • 三周年创作纪念日

    机缘 不知不觉已经开始分享三周年了 xff0c 最开始什么都不懂 xff0c 作为自动化的学生 xff0c 以为学点算法就可以变得厉害一些 xff0c 于是学了点C 43 43 相关就开始分享 后来立志于研究深度学习算法 xff0c 感觉强
  • win10+vs2017+opencv4.0.1+opencv_contrib-4.0.1详细教程

    最近想好好认真学习一下opencv4 0 xff0c 需要用到contrib扩展库 xff0c 配置完记录下 先写一下版本信息 xff1a opencv4 0 1 xff0c vs2017和 win10 其他opencv版本安装和配置原理一
  • OpenHD---低成本开源高清数字图传

    转载注明出处 文章目录 一 前言二 OpenHD简单介绍三 图传材料准备1 树莓派2 摄像头 排线 SD卡 读卡器4 网卡 四 硬件连接五 镜像刷写六 通电测试七 系统参数设置八 连接飞控九 关于二次开发十 最后 一 前言 这篇文章是对树莓
  • PS2手柄通讯协议解析---附资料和源码

    文章目录 一 PS2介绍二 PS2通讯协议介绍 xff08 1 xff09 PS2端口介绍 xff08 2 xff09 PS2通讯过程 三 基于STM32的PS2通信源码四 文档与源码下载链接 一 PS2介绍 今天就带大家来认识一下PS2的
  • Stm32延时与计时方法(HAL库)

    文章目录 一 延时的3种方法1 循环延时2 定时器中断延时与非中断延时 三 定时器中断式计时与延时二 定时器非中断式延时四 代码例程五 同系列博客 一 延时的3种方法 首先 xff0c 先了解一下什么延时 顾名思义 xff0c 延时即是延长
  • CAN通信知识梳理及在Stm32上的应用(HAL库)

    文章目录 一 CAN通信简介二 硬件连接三 CAN总线上的电平信号四 CAN帧的种类 xff08 1 xff09 遥控帧 xff08 2 xff09 数据帧 五 CAN的仲裁方法六 CAN在Stm32上的应用 xff08 1 xff09 C
  • C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)

    文章目录 C语言函数库 一 lt ctype h gt 二 lt math h gt 三 lt stdio h gt 四 lt stdlib h gt 五 lt time h gt 六 lt string h gt 文档资料 C语言函数库
  • 作品分享:基于STM32的温度报警器含源码、原理图、PCB文件、作品报告

    文章目录 一 前言二 材料准备三 硬件部分四 软件部分1 底层封装库2 中间层3 应用层 五 外壳设计六 资料链接 一 前言 该作品是我在华工电工开放实习的作品 xff0c 本作品由七部分组成 中央为Stm32F405RG芯片 xff0c
  • 基于时延法的麦克风阵列声源定位分析

    文章目录 一 关于麦克风阵列二 关于声源定位三 基于广义互相关 GCC 计算时延四 基于时延差的声源定位法1 近场模型2 远场模型 五 三维空间阵列的声源定位系统实现1 推导过程 六 六元圆形麦克风阵列声源定位七 相关链接 一 关于麦克风阵
  • STM32实现PWM输出与PWM输入捕获(HAL库)

    文章目录 一 前言二 STM32 定时器2 1 基本定时器2 1 1 功能与框图2 1 2 CubeMX配置 2 2 通用定时器2 2 1 功能与框图2 2 2 CubeMX配置 2 3 高级定时器2 3 1 功能与框图2 3 2 Cube
  • 宇树A1电池拆解分享

    文章目录 一 关于A1电池二 拆解过程2 1 结构设计2 2 电路方案2 3 电芯设计 三 相关链接 一 关于A1电池 今天的主角是宇树的A1电池 该电池主要用在宇树的A1机器狗上 xff0c A1主打的是运动性能 xff0c 最大持续奔跑
  • 大疆Mini1充电管家拆解分享

    文章目录 一 关于充电管家二 拆解过程 一 关于充电管家 御Mini充电管家外观简洁优雅 xff0c 最多可容纳三块电池进行充电 xff0c 在一块电池充满电后会自动进行下一块电池的充电 xff0c 支持电池的电量显示 除此之外 xff0c
  • 磁盘高级管理工具VDO (redhat8版本以上或者centos8以上)

    1 vdo简述 Virtual Data Optimizer 通过数据去重 压缩的方式来优化存储空间 VDO层放置在现有块存储设备上 xff0c 例如Raid设备 本地磁盘设备 LVM 或文件系统 放置在VDO层之上 xff0c 也可以将V
  • bootloader学习笔记---第一篇以stm32为例

    目录 一 bootloader的任务 二 bootloader开发的基础知识 段的概念 重定位的概念 散列文件的概念 异常向量 xff08 待补充 xff09 三 最简单的bootloader程序 四 使用汇编跳转 五 备注 一 bootl
  • 场景文本识别模型综述

    一 数据集的分析 一 训练数据集 大多数自然场景文字识别算法使用合成数据进行训练 两个常用的合成数据集是 MJSynth MJ 和 SynthText ST xff0c 分别包含890万和550万张训练样本 图1 不同比例的训练数据集 xf
  • 数据挖掘实验一使用matplotlib进行绘图

    曲线图 span class token keyword import span numpy span class token keyword as span np span class token keyword import span
  • 爬虫之爬取百度贴吧

    爬虫之爬取百度贴吧 直接示例代码 xff1a import requests from lxml import html etree 61 html etree from lxml import etree class Tieba obje

随机推荐

  • 正则表达式匹配开头和结尾(^、$、[^指定字符])

    1 匹配开头和结尾 代码功能 匹配字符串开头 匹配字符串结尾 示例1 xff1a 需求 xff1a 匹配以数字开头的数据 import re 匹配以数字开头的数据 match obj 61 re match 34 d 34 34 1hell
  • 人工智能主要分支

    人工智能主要分支 1 主要分支介绍 通讯 感知与行动是现代人工智能的三个关键能力 xff0c 在这里我们将根据这些能力 应用对这三个技术领域进行介绍 xff1a 计算机视觉 CV 人脸识别 自然语言处理 NLP 语音识别 语义识别 在 NL
  • re.sub()用法详解

    源代码 参数及其意义 xff1a def sub pattern repl string count 61 0 flags 61 0 34 34 34 Return the string obtained by replacing the
  • BERT模型的详细介绍

    1 BERT 的基本原理是什么 xff1f BERT 来自 Google 的论文Pre training of Deep Bidirectional Transformers for Language Understanding xff0c
  • 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度

    自然语言处理 NLP 之使用TF IDF模型计算文本相似度 所用数据集 xff1a ChnSentiCorp htl all csv 语料库即存放稀疏向量的列表 要注意的是 xff0c 搜索文本text与被检索的文档共用一个特征词词典 NL
  • HTTP 请求报文

    1 HTTP 请求报文介绍 HTTP最常见的请求报文有两种 GET 方式的请求报文POST 方式的请求报文 说明 GET 获取web服务器数据 比如获取新闻列表的数据 POST 向web服务器提交数据 比如登录的时候把用户名和密码发送给服务
  • 傅里叶变换公式

    傅里叶变换的目的 xff1a 有些信号在时域上是很难看出什么特征的 xff0c 但是如果变换到频域之后 xff0c 就很容易看出特征了 1 FS Fourier series 连续时间周期信号的傅里叶级数 xff0c 时域上任意连续的周期信
  • python修改闭包内使用的外部变量

    1 修改闭包内使用的外部变量 1 1 修改闭包内使用的外部变量的错误示例 定义一个外部函数 def func out num1 定义一个内部函数 def func inner num2 这里本意想要修改外部num1的值 xff0c 实际上是
  • re.search()用法详解

    re search xff1a 匹配整个字符串 xff0c 并返回第一个成功的匹配 如果匹配失败 xff0c 则返回None pattern 匹配的规则 string 要匹配的内容 flags 标志位 这个是可选的 就是可以不写 可以写 比
  • re.findall()用法详解

    re findall xff1a 函数返回包含所有匹配项的列表 返回string中所有与pattern相匹配的全部字串 xff0c 返回形式为数组 示例代码1 xff1a 打印所有的匹配项 import re s 61 34 Long li
  • Linux系统中创建虚拟环境详解

    1 方法一 1 1 安装虚拟环境的命令 xff1a sudo pip install virtualenv sudo pip install virtualenvwrapper 1 2 安装完虚拟环境后 xff0c 如果提示找不到mkvir
  • 使用python将图片改为灰度图或黑白图

    使用python将图片改为灰度图或黑白图有三种方式 xff0c 分别是是使用cv2库和PIL库来实现 xff0c 详细过程如下所示 1 使用cv2库将图片改为灰度图 在使用cv2进行读取原彩色图片时 xff0c 在里面添加一个参数cv2 I
  • 虚拟机中windows镜像下载与安装

    镜像文件下载 xff1a 链接 xff1a https pan baidu com s 1VKWMHHCGRwWXk2GpxyUp0A 提取码 xff1a shlg 注意 xff1a 虚拟机中的镜像和本地电脑系统安装的镜像是一样的 安装教程
  • Linux系统中安装elasticsearch详解

    官方网站 xff1a Install Elasticsearch from archive on Linux or MacOS Elasticsearch Guide 7 17 Elastic 一 安装命令 xff1a wget https
  • centos7系统查看防火墙状态

    查看方法 xff1a 1 利用systemctl查看 xff0c 该命令用于管理系统 xff0c 语法为 systemctl status firewalld xff1b 2 用firewall查看 xff0c 可以查看防火墙的默认状态 x
  • Docker中网络的使用和配置用法详解

    一 单个物理机中docker网络 1 1 Docker默认网桥 安装Docker 服务默认会创建一个 docker0 网桥 xff08 其上有一个 docker0 内部接口 xff09 xff0c 它在内核层连通了其他的物理或虚拟网卡 xf
  • mongo数据库中字符串型正负数值比较大小

    数据库中数据展示 xff1a 使用python代码实现 xff1a Requires pymongo 3 6 0 43 from pymongo import MongoClient client 61 MongoClient 34 mon
  • IDEA插件系列(3):Easy Javadoc插件——快速生成javadoc文档注释

    1 插件介绍 Easy Javadoc插件 能帮助开发者快速生成类 方法 属性等中文javadoc 2 安装方式 第一种安装方式是在线下载安装插件 第二种安装方式是使用离线插件进行安装 插件下载地址 xff1a https plugins
  • flask项目中内部接口调用其他内部接口操作

    1 requests 在 Flask 框架项目中 xff0c 可以通过使用 requests 模块来进行内部接口调用 requests 模块是 Python 中常用的 HTTP 请求库 xff0c 可以用于发送 HTTP 请求和处理响应 示
  • ElasticSearch删除索引中的数据(delete_by_query)

    1 删除两个月以前的数据 在 Elasticsearch 中 xff0c 要删除两个月以前的数据 xff0c 可以通过以下步骤 xff1a 计算当前时间的两个月前的日期 xff0c 可以使用 Python 的 datetime 模块来实现