要获取下一页结果,是否应该返回上一次搜索的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()
每次搜索都不需要在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中正确显示 如果总是获取第一页,请考虑是否传递正确的值