前言
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]#