定点查询

定点查询 #

定点查询,也称为 Point in Time 搜索,具有与常规搜索相同的功能,不同之处在于 PIT 搜索作用于较旧的数据集,而常规搜索作用于实时数据集。PIT 搜索不绑定于特定查询,因此您可以在同一个冻结在时间点上的数据集上运行不同的查询。

您可以使用创建 PIT API 来创建 PIT。当您为一组索引创建 PIT 时,Easysearch 会锁定这些索引的一组段,使它们在时间上冻结。在底层,此 PIT 所需的资源不会被修改或删除。 如果作为 PIT 一部分的段被合并,Easysearch 会在 PIT 创建时通过 keep_alive 参数指定的时间段内保留这些段的副本。

创建 PIT 操作会返回一个 PIT ID,您可以使用该 ID 在冻结的数据集上运行多个查询。即使索引继续摄取数据并修改或删除文档,PIT 引用的数据自 PIT 创建以来不会发生变化。当您的查询包含 PIT ID 时, 您不需要将索引传递给搜索,因为它将使用该 PIT。使用 PIT ID 的搜索在多次运行时将产生完全相同的结果。

创建 PIT #

创建一个 PIT。查询参数 keep_alive 是必需的;它指定了保持 PIT 的时间长度。

端点 #

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

路径参数 #

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

查询参数 #

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

请求示例 #

POST /test-index/_pit?keep_alive=100m

示例响应 #

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

响应体字段 #

字段数据类型描述
pit_idBase64 编码PIT ID。
creation_time长整型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 #

返回 Easysearch 集群中的所有 PIT。

请求示例 #

GET /_pit/_all

示例响应 #

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

响应体字段 #

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

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

字段数据类型描述
pit_idBase64 编码PIT ID。
creation_time长整型PIT 创建的时间,以毫秒为单位(从纪元开始)。
keep_alive长整型保持 PIT 的时间长度,以毫秒为单位。

删除 PIT #

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

请求示例: 删除所有 PIT #

DELETE /_pit/_all

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

请求体字段 #

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

示例请求:通过 ID 删除 PIT #

DELETE /_pit

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

示例响应 #

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

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

响应体字段 #

字段数据类型描述
successful布尔值删除操作是否成功。
pit_idBase64 编码要删除的 PIT 的 PIT ID。

PIT 设置 #

您可以为 PIT 指定以下设置。

设置描述默认值
point_in_time.max_keep_alive一个集群级别的设置,指定 keep_alive 参数的最大值。24h
search.max_open_pit_context一个节点级别的设置,指定节点的最大开放 PIT 上下文数量。300
Edit 编辑本页