📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

此 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_idstring 或 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
}

响应字段说明 #

字段类型描述
acknowledgedboolean操作是否被确认
deletedinteger成功删除的 PIT 数量
failedinteger删除失败的 PIT 数量
failuresarray失败的 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 管理最佳实践 #

  1. 搜索完成后删除:每次搜索完成后立即删除 PIT
  2. 使用 try-finally 模式:确保 PIT 在使用后被删除
  3. 定期清理:定期检查并删除长时间未使用的 PIT
  4. 监控 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

注意事项 #

  1. 不支持查询字符串参数:所有参数必须通过请求体传递
  2. _all 路由不能有请求体:使用 DELETE /_pit/_all 时不能提供请求体
  3. ID 验证:删除不存在的 PIT 不会报错,deleted 计数会反映实际删除数量
  4. 权限要求:需要相应的集群管理权限
  5. 不可恢复:删除后 PIT ID 无法恢复,需要重新创建

相关文档 #