首页 > 编程知识 正文

elasticsearch批量删除数据,elasticsearch 详解

时间:2023-05-06 02:58:46 阅读:127966 作者:4912

前几天同事打来电话,问ES删除数据有没有什么漏洞。

我那时问是删除索引还是删除索引中的数据。 她回答说要删除数据。 我说检测到这些数据后直接删除就可以了。 什么洞都没有。

稍后再想想,关于删除ES数据,迄今为止遇到过很多删除场景。 是否真的有洞,想想,真的有。

我维护的ES群集最大规模在180个节点以上,每天增加70亿个/10TB的日志数据,总容量为2PB,主要提供各种日志的存储、检索和分析。

以前,需要删除一些关键字的日志数据。 时间段最近半年。

这个集群索引是按日志类型进行天分划分的,所以半年内有很多索引。 根据用户提供的关键字搜索最近一个月的话,竟然达到2亿件,半年内达到12亿件,从1万件以上删除了12亿件。 ohmyga~~

该方式只能用_delete_by_query方式删除,如果删除大数据量_delete_by_query,则存在响应超时、集群负载过高、不稳定等各种问题,因此该方式

针对以上问题,我根据现有的经验和网络资料,整理一下ESS的删除操作,整理一下知识进行回顾

要删除数据,请删除索引(同时删除数据和表结构,其作用与MySQL中的DROP TABLE '表名'相同),而不删除表结构(其作用与MySQL中的Delete语句相同)

一、删除索引:

要删除单个索引,请使用命令【DELETE /索引名称】

删除索引名称

要删除多个索引,请使用命令【DELETE /索引1、索引2】

Delete索引名称1、索引名称2

【DELETE /testindex*】删除以:testindex开头的所有索引文件(如果配置文件禁止,则无法使用此方法);

Delete索引名称*

所有索引命令【DELETE /_all】(如果配置文件禁止,则此方法不可用)或删除【DELETE /*】)如果配置文件禁止,则此方法不可用)

Delete _all

注:对于数据安全来说,使用一个命令删除所有数据可能会产生可怕的结果,因此为了避免大量删除,可以在elasticsearch.yml配置文件中或在动态配置中使用action.destructivive

设置后,仅当使用特定名称删除索引时,才禁用使用_all或通配符删除索引。 (如果以上描述的配置文件禁止,则不能使用此方法。 ) ) ) ) ) ) ) ) ) ) ) ) )。

2 :删除数据:

1.根据主键删除数据。 【DELETE /索引名/类型名/主键编号】

Delete索引名称/文档名称/主键编号

2 )根据匹配条件删除数据((注意请求方式为开机自检) ) ) ) ) ) ) ) ) )。

POST索引名称/文档名称/_delete_by_query

{

' query':{

' term':{

' _id':100000100

}

}

}

如果想根据条件删除数据,可以用查询体组织条件。

启动时(删除开始时) _delete_by_query为索引) )数据库)的快照,使用内部版本号查找要删除的文档。 也就是说,如果文档在捕获快照和运行删除过程之间发生更改,则版本将发生冲突。 版本控制中匹配的文档将被删除。

由于internal版本控制不支持0作为有效数字,因此无法删除版本号为0的文档,请求将失败。

_delete_by_query运行时,将按顺序执行多个搜索请求以删除所有匹配的文档。 每次找到文档时,都会执行相应的批处理请求,并删除所有找到的文档。 如果搜索或批处理请求被拒绝,_delete_by_query将根据默认策略重试被拒绝的请求。 最多10次)。 达到最大重试次数后,_delete_by_query请求将中止,并在failures字段中响应所有故障。 已删除的仍将运行。 这意味着进程不会回滚,只会中断。

第一个请求失败导致中断,失败批处理请求的所有故障信息都记录在failures元素中。 我会回来的。 因此,失败的请求不少。

如果要计算存在多少版本冲突而不是中止,请在URL中设置conflicts=proceed,或在请求方中设置“conflicts': 'proceed”。

3 )删除所有数据()注意请求方式为开机自检,仅删除数据,不删除表结构) ) )。

post/test index/testtype/_ delete _ by _ query? 预失真

{

' query': {

' match_all': {

}

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。