下面的 curl 命令用于向 Elasticsearch 发送一个 _delete_by_query 请求,目的是从指定索引中批量删除符合查询条件的文档
curl -X POST -u elastic:elastic#SZT5764 \
http://es_host:19200/index_name/_delete_by_query \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"must": [
{
"match": {
"mhid": "FNQQ-QZFU-FYFA"
}
}
]
}
},
"size": 10
}
'
关键点解释
命令结构
-
curl -X POST
curl
是一个命令行工具,用于向服务器发送 HTTP 请求。-X POST
指定请求方法为 POST(用于创建或修改资源)。对于_delete_by_query
操作,POST 是必须的。
-
-u elastic:elastic#SZT5764
- 使用
-u
选项提供基本的 HTTP 认证信息。 elastic
是用户名,elastic#SZT5764
是密码,表明需要以管理员权限连接到 Elasticsearch。
- 使用
-
http://es_host:19200/index_name/_delete_by_query
http://es_host:19200
是 Elasticsearch 服务器地址和端口。es_host
是服务器主机名(应替换为实际主机地址,如 IP)。19200
是端口号,通常 Elasticsearch 使用默认的9200
,但这里自定义为19200
。
index_name
是索引的名称,表示要操作的具体 Elasticsearch 索引。_delete_by_query
是一个 Elasticsearch API,用于根据查询条件批量删除文档。
-
-H "Content-Type: application/json"
- 添加 HTTP 请求头,指定请求体内容的格式为 JSON(这是 Elasticsearch 要求的标准格式)。
-
-d '{ ... }'
- 使用
-d
提供请求体(JSON 格式),定义查询条件和操作参数。
- 使用
请求体部分详解
{
"query": {
"bool": {
"must": [
{
"match": {
"mhid": "FNQQ-QZFU-FYFA"
}
}
]
}
},
"size": 10
}
-
"query"
- 定义删除操作的查询条件,决定哪些文档将被匹配和删除。
-
"bool"
- 使用布尔查询 (
bool query
),可以结合多个子查询以更复杂的逻辑筛选文档。
- 使用布尔查询 (
-
"must"
must
表示条件“必须满足”,即仅删除满足此条件的文档。must
内可以包含多个条件,这里只有一个条件。
-
"match"
match
是一个查询子句,用于模糊匹配文档中指定字段的值。"mhid": "FNQQ-QZFU-FYFA"
表示查询所有mhid
字段的值为"FNQQ-QZFU-FYFA"
的文档。
-
"size": 10
- 限制单次
_delete_by_query
删除的文档数最多为 10 条。 - 这不会影响后续可以继续运行更多删除命令(直到删除所有符合条件的文档),但每次删除时只会操作最多 10 个文档。
- 限制单次
实际含义
此命令向 Elasticsearch 索引 index_name
发送一个 _delete_by_query
请求,删除以下文档:
- 文档的
mhid
字段值为FNQQ-QZFU-FYFA
。 - 单次操作中最多删除 10 条匹配的文档。(执行一次会把所有满足条件的数据都删除,但是在底层会自动进行分批处理)
执行结果
{"took":950,"timed_out":false,"total":2564,"deleted":2564,"batches":257,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1.0,"throttled_until_millis":0,"failures":[]}