Link Search Menu Expand Document Documentation Menu

时间点

使用 时间点 (PIT) API 来管理 PIT。


目录


创建 PIT

2.4 版引入

创建 PIT。keep_alive 查询参数是必需的;它指定 PIT 的保留时间。

端点

POST /<target_indexes>/_search/point_in_time?keep_alive=1h&routing=&expand_wildcards=&preference= 

路径参数

参数 数据类型 描述
target_indexes 字符串 PIT 的目标索引名称。可以包含逗号分隔列表或通配符索引模式。

查询参数

参数 数据类型 描述
keep_alive 时间 PIT 的保留时间。每次使用搜索 API 访问 PIT 时,PIT 的生命周期将延长与 keep_alive 参数相等的时间。必需。
preference 字符串 用于执行搜索的节点或分片。可选。默认为 random
路由 字符串 指定将搜索请求路由到特定分片。可选。默认为文档的 _id
expand_wildcards 字符串 可以匹配通配符模式的索引类型。支持逗号分隔值。有效值如下:
- all:匹配任何索引或数据流,包括隐藏的。
- open:匹配开放的、非隐藏的索引或非隐藏的数据流。
- closed:匹配关闭的、非隐藏的索引或非隐藏的数据流。
- hidden:匹配隐藏的索引或数据流。必须与 openclosed 或同时与 openclosed 结合使用。
- none:不接受任何通配符模式。
可选。默认为 open
allow_partial_pit_creation 布尔型 指定是否创建带有部分故障的 PIT。可选。默认为 true

请求示例

POST /my-index-1/_search/point_in_time?keep_alive=100m

示例响应

{
    "pit_id": "o463QQEPbXktaW5kZXgtMDAwMDAxFnNOWU43ckt3U3IyaFVpbGE1UWEtMncAFjFyeXBsRGJmVFM2RTB6eVg1aVVqQncAAAAAAAAAAAIWcDVrM3ZIX0pRNS1XejE5YXRPRFhzUQEWc05ZTjdyS3dTcjJoVWlsYTVRYS0ydwAA",
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "creation_time": 1658146050064
}

响应正文字段

字段 数据类型 描述
pit_id Base64 编码的二进制 PIT ID。
creation_time 长整型 (long) PIT 创建的时间,以自纪元以来的毫秒数表示。

延长 PIT 时间

您可以在执行搜索时,在 pit 对象中提供 keep_alive 参数来延长 PIT 时间。

GET /_search
{
  "size": 10000,
  "query": {
    "match" : {
      "user.id" : "elkbee"
    }
  },
  "pit": {
    "id":  "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA==", 
    "keep_alive": "100m"
  },
  "sort": [ 
    {"@timestamp": {"order": "asc"}}
  ],
  "search_after": [  
    "2021-05-20T05:30:04.832Z"
  ]
}

搜索请求中的 keep_alive 参数是可选的。它指定延长 PIT 保留时间的量。

列出所有 PIT

2.4 版引入

返回 OpenSearch 集群中的所有 PIT。

跨集群行为

“列出所有 PIT API”仅返回本地 PIT 或混合 PIT(在本地和远程集群中创建的 PIT)。它不返回完全远程的 PIT。

请求示例

GET /_search/point_in_time/_all

示例响应

{
    "pits": [
        {
            "pit_id": "o463QQEPbXktaW5kZXgtMDAwMDAxFnNOWU43ckt3U3IyaFVpbGE1UWEtMncAFjFyeXBsRGJmVFM2RTB6eVg1aVVqQncAAAAAAAAAAAEWcDVrM3ZIX0pRNS1XejE5YXRPRFhzUQEWc05ZTjdyS3dTcjJoVWlsYTVRYS0ydwAA",
            "creation_time": 1658146048666,
            "keep_alive": 6000000
        },
        {
            "pit_id": "o463QQEPbXktaW5kZXgtMDAwMDAxFnNOWU43ckt3U3IyaFVpbGE1UWEtMncAFjFyeXBsRGJmVFM2RTB6eVg1aVVqQncAAAAAAAAAAAIWcDVrM3ZIX0pRNS1XejE5YXRPRFhzUQEWc05ZTjdyS3dTcjJoVWlsYTVRYS0ydwAA",
            "creation_time": 1658146050064,
            "keep_alive": 6000000
        }
    ]
}

响应正文字段

字段 数据类型 描述
pits JSON 对象数组 所有 PIT 的列表。

每个 PIT 对象包含以下字段。

字段 数据类型 描述
pit_id Base64 编码的二进制 PIT ID。
creation_time 长整型 (long) PIT 创建的时间,以自纪元以来的毫秒数表示。
keep_alive 长整型 (long) PIT 的保留时间,以毫秒为单位。

删除 PIT

2.4 版引入

删除一个、多个或所有 PIT。当 keep_alive 时间段结束后,PIT 会自动删除。但是,为了释放资源,您可以使用“删除 PIT API”删除 PIT。“删除 PIT API”支持按 ID 删除 PIT 列表或一次性删除所有 PIT。

跨集群行为

按 ID 删除 PIT API 完全支持删除跨集群 PIT。

“删除所有 PIT API”仅删除本地 PIT 或混合 PIT(在本地和远程集群中创建的 PIT)。它不删除完全远程的 PIT。

示例请求:删除所有 PIT

DELETE /_search/point_in_time/_all

如果您想删除一个或多个 PIT,请在请求正文中指定其 PIT ID。

请求正文字段

字段 数据类型 描述
pit_id Base64 编码的二进制或二进制数组 要删除的 PIT 的 PIT ID。必需。

示例请求:按 ID 删除 PIT

DELETE /_search/point_in_time

{
    "pit_id": [
        "o463QQEPbXktaW5kZXgtMDAwMDAxFkhGN09fMVlPUkVPLXh6MUExZ1hpaEEAFjBGbmVEZHdGU1EtaFhhUFc4ZkR5cWcAAAAAAAAAAAEWaXBPNVJtZEhTZDZXTWFFR05waXdWZwEWSEY3T18xWU9SRU8teHoxQTFnWGloQQAA",
        "o463QQEPbXktaW5kZXgtMDAwMDAxFkhGN09fMVlPUkVPLXh6MUExZ1hpaEEAFjBGbmVEZHdGU1EtaFhhUFc4ZkR5cWcAAAAAAAAAAAIWaXBPNVJtZEhTZDZXTWFFR05waXdWZwEWSEY3T18xWU9SRU8teHoxQTFnWGloQQAA"
    ]
}

示例响应

对于每个 PIT,响应包含一个 JSON 对象,其中包含一个 PIT ID 和一个 successful 字段,用于指定删除是否成功。部分失败被视为失败。

{
    "pits": [
        {
            "successful": true,
            "pit_id": "o463QQEPbXktaW5kZXgtMDAwMDAxFkhGN09fMVlPUkVPLXh6MUExZ1hpaEEAFjBGbmVEZHdGU1EtaFhhUFc4ZkR5cWcAAAAAAAAAAAEWaXBPNVJtZEhTZDZXTWFFR05waXdWZwEWSEY3T18xWU9SRU8teHoxQTFnWGloQQAA"
        },
        {
            "successful": false,
            "pit_id": "o463QQEPbXktaW5kZXgtMDAwMDAxFkhGN09fMVlPUkVPLXh6MUExZ1hpaEEAFjBGbmVEZHdGU1EtaFhhUFc4ZkR5cWcAAAAAAAAAAAIWaXBPNVJtZEhTZDZXTWFFR05waXdWZwEWSEY3T18xWU9SRU8teHoxQTFnWGloQQAA"
        }
    ]
}

响应正文字段

字段 数据类型 描述
successful 布尔型 删除操作是否成功。
pit_id Base64 编码的二进制 要删除的 PIT 的 PIT ID。

安全模型

本节描述了在启用安全插件的情况下运行 OpenSearch 时使用 PIT API 操作所需的权限。

您可以使用 point_in_time_full_access 角色访问所有 PIT API 操作。如果此角色不符合您的需求,您可以混合和匹配单个 PIT 权限以适应您的用例。每个操作都对应于 REST API 中的一个操作。例如,indices:data/read/point_in_time/create 权限允许您创建 PIT。以下是可能的权限:

  • indices:data/read/point_in_time/create – 创建 API
  • indices:data/read/point_in_time/delete – 删除 API
  • indices:data/read/point_in_time/readall – 列出所有 PIT API
  • indices:data/read/search – 搜索 API
  • indices:monitor/point_in_time/segments – PIT 段 API

对于 all API 操作,例如列出所有和删除所有,用户需要所有索引 (*) 权限。对于搜索、创建 PIT 或删除列表等 API 操作,用户只需要单独的索引权限。

PIT ID 在保存时始终包含底层(已解析的)索引。以下部分描述了别名和数据流所需的权限。

别名权限

对于别名,用户必须对任何 PIT 操作拥有索引别名权限。

数据流权限

对于数据流,用户必须对任何 PIT 操作同时拥有数据流数据流的后端索引权限。例如,用户必须拥有 data-stream-11 数据流及其后端索引 .ds-my-data-stream11-000001 的权限。

如果用户只有数据流权限,他们将能够创建 PIT,但在没有后端索引权限的情况下,他们将无法将 PIT ID 用于其他操作,例如搜索。