此 API 用于删除 Point In Time (PIT) 搜索上下文,释放集群资源。建议在完成搜索后及时删除不再使用的 PIT。
API #
DELETE /_pit
DELETE /_pit/_all
API 的作用 #
删除 PIT 上下文,主要用途包括:
- 释放资源:删除不再使用的 PIT,释放内存和计算资源
- 批量清理:删除所有 PIT 上下文
- 精确管理:删除指定的 PIT 上下文
删除 PIT 后,该 PIT ID 将无法再用于搜索操作。
API 的参数 #
路由参数 #
此 API 支持两种路由模式:
| 路由 | 描述 |
|---|---|
DELETE /_pit | 删除指定的 PIT,需要在请求体中提供 PIT ID 列表 |
DELETE /_pit/_all | 删除所有的 PIT 上下文 |
查询字符串参数 #
此 API 不支持查询字符串参数。所有参数必须通过请求体传递。
请求体参数(仅 DELETE /_pit) #
| 参数 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
pit_id | string 或 array | 必需 | 要删除的 PIT ID 或 PIT ID 数组 |
请求示例 #
删除所有 PIT #
# 删除所有 PIT 上下文
DELETE /_pit/_all
注意:使用 /_all 路由时,不能有请求体。
删除指定的 PIT #
# 删除单个 PIT
DELETE /_pit
Content-Type: application/json
{
"pit_id": "o463QQEPbXktaW5kZXgtMDAwMDAxFnNOWU43ckt3U3IyaFVpbGE1UWEtMncAFjFyeXBsRGJmVFM2RTB6eVg1aVVqQncAAAAAAAAAAAIWcDVrM3ZIX0pRNS1XejE5YXRPRFhzUQEWc05ZTjdyS3dTcjJoVWlsYTVRYS0ydwAA"
}
删除多个 PIT #
# 删除多个 PIT(数组格式)
DELETE /_pit
Content-Type: application/json
{
"pit_id": [
"pit_id_1_here",
"pit_id_2_here",
"pit_id_3_here"
]
}
响应示例 #
成功响应 - 删除指定的 PIT #
{
"acknowledged": true,
"deleted": 3,
"failed": 0,
"failures": []
}
成功响应 - 删除所有 PIT #
{
"acknowledged": true,
"deleted": 15
}
响应字段说明 #
| 字段 | 类型 | 描述 |
|---|---|---|
acknowledged | boolean | 操作是否被确认 |
deleted | integer | 成功删除的 PIT 数量 |
failed | integer | 删除失败的 PIT 数量 |
failures | array | 失败的 PIT 详细信息 |
错误响应 #
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "unrecognized param: [some_param]"
}
],
"type": "illegal_argument_exception",
"reason": "unrecognized param: [some_param]"
},
"status": 400
}
使用建议 #
1. 及时删除不再使用的 PIT #
# 搜索完成后立即删除 PIT
DELETE /_pit
{
"pit_id": "your_pit_id_here"
}
2. 批量删除 #
# 完成一批搜索后,批量删除相关 PIT
DELETE /_pit
{
"pit_id": ["pit1", "pit2", "pit3"]
}
3. 清理所有 PIT(谨慎使用) #
# 仅在确认所有 PIT 都不再需要时使用
DELETE /_pit/_all
PIT 管理最佳实践 #
- 搜索完成后删除:每次搜索完成后立即删除 PIT
- 使用 try-finally 模式:确保 PIT 在使用后被删除
- 定期清理:定期检查并删除长时间未使用的 PIT
- 监控 PIT 数量:使用
GET /_pit监控集群中的 PIT 数量
代码示例(伪代码) #
// 创建 PIT
const pitResponse = await client.createPIT({ index: 'my-index', keepAlive: '5m' });
const pitId = pitResponse.pit_id;
try {
// 使用 PIT 进行搜索
const searchResponse = await client.search({
pit: { id: pitId, keepAlive: '1m' },
query: { match_all: {} },
size: 100
});
// 处理搜索结果...
} finally {
// 确保删除 PIT
await client.deletePIT({ body: { pit_id: pitId } });
}
与相关 API 的配合 #
| API | 功能 |
|---|---|
POST /{index}/_pit | 创建 PIT |
GET /_pit | 查询 PIT 信息 |
DELETE /_pit | 删除指定 PIT |
DELETE /_pit/_all | 删除所有 PIT |
注意事项 #
- 不支持查询字符串参数:所有参数必须通过请求体传递
- _all 路由不能有请求体:使用
DELETE /_pit/_all时不能提供请求体 - ID 验证:删除不存在的 PIT 不会报错,
deleted计数会反映实际删除数量 - 权限要求:需要相应的集群管理权限
- 不可恢复:删除后 PIT ID 无法恢复,需要重新创建





