Elasticsearch Delete By Query Plugin

2022-01-20 11:35:31 浏览数 (1)

前言

Elasticsearch 的使用过程中常常要删除具备一定特性的一批数据(documents)

  • 传统方法:使用 _search API搜出来,然后通过脚本处理后使用 DELETE 方法一个个删除
  • 批量操作:使用 scroll API搜出来,然后通过 bulk 进行批量删除
  • 最便捷方法:使用 Delete By Query 方法,直接进行删除

前面两种方法都特别繁琐,很显然最后一种方法最便捷,但问题是 Delete By Query API在 1.5.3 的版本中因为潜在的安全与性能隐患就已经被废弃了,这里给出了 原因

Delete By Query API Deprecated in 1.5.3. Delete by Query will be removed in 2.0: it is problematic since it silently forces a refresh which can quickly cause OutOfMemoryError during concurrent indexing, and can also cause primary and replica to become inconsistent. Instead, use the scroll/scan API to find all matching ids and then issue a bulk request to delete them..

但好在废除这个API的同时又提供了一个 delete-by-query plugin 来解决这个问题

这里在 ES2.1 中分享一下 Delete By Query 的操作过程,详细可以参阅 官方文档

Tip: 当前的最新版本为 Elasticsearch 2.1.1


概要


背景

ES版本为2.1.1

代码语言:javascript复制
[root@esdbqp bin]# ps faux | grep elasticsearch |grep -v grep 
492      16600 28.8  1.2 4968568 411068 ?      Sl   23:39   2:17 /usr/bin/java -Xms256m -Xmx1g -Djava.awt.headless=true -XX: UseParNewGC -XX: UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX: UseCMSInitiatingOccupancyOnly -XX: HeapDumpOnOutOfMemoryError -XX: DisableExplicitGC -Dfile.encoding=UTF-8 -Djna.nosys=true -Des.path.home=/usr/share/elasticsearch -cp /usr/share/elasticsearch/lib/elasticsearch-2.1.1.jar:/usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch start -p /var/run/elasticsearch/elasticsearch.pid -d -Des.default.path.home=/usr/share/elasticsearch -Des.default.path.logs=/var/log/elasticsearch -Des.default.path.data=/var/lib/elasticsearch -Des.default.path.conf=/etc/elasticsearch
[root@esdbqp bin]# 

0 人点赞