如何使用 Java API Client (Elastic 8.x) 判断 PIT ID 是否还活着?

问题描述 投票:0回答:1

要获取下一页结果,是否应该返回上一次搜索的lastId和pitId?

我参考这篇文章 如何通过 Java API 客户端 (Elastic 8.x) 在 ElasticSearch 中使用滚动功能

final Time keepAlive = new Time.Builder().time("1m").build();
        final String pitId;

        if (dto.getPitId() != null && !dto.getPitId().isEmpty()) {
            pitId = dto.getPitId();
        } else {
            final OpenPointInTimeResponse pitResp = esClient.openPointInTime(req -> req.index("message").keepAlive(keepAlive));
            pitId = pitResp.id();
        }

如果参数pitId过期超过一分钟怎么办,如何判断?

如何通过keepAlive更新pitId来延长pitId的保留期? 我只找到要删除的api closePointInTime()

java elasticsearch
1个回答
0
投票

每次搜索都不需要在RequestBody或RequestParam上传递PIT 但是search_after需要一些参数而不仅仅是lastId。你可以使用这个命令来获取它们:

List<FieldValue> sorts = hit.sort();

从第二次开始更新排序

            List<FieldValue> sort = new ArrayList<>();
            sort.add(FieldValue.of(lastId));
            sort.add(FieldValue.of(lastorderId));
            searchRequest = searchRequest.searchAfter(sort);

顺便说一句,id使用long数据类型无法在kibana中正确显示 如果总是获取第一页,请考虑是否传递正确的值

© www.soinside.com 2019 - 2024. All rights reserved.