我按日期时间排序并有循环值。
#1 "2023-01-03 19:57:38"
#2 "2023-01-03 19:57:38"
...
#3 "2023-01-03 19:57:39"
#4 "2023-01-03 19:57:39"
...
这会在使用
search_after
参数分页时泄漏文档。根据上面的数据集,假设前 10K 文档以#1 值结尾,因此接下来的 10K 将以#3 开头。 #2因此错过了。
在自己搜索这个Official OpenSearch page,GitHub上的问题和其他互联网资源后,我没有找到任何解决方案,甚至没有找到任何解决方案。如果我使用一些独特的字段作为 2d 排序参数,它可以部分帮助,但会使响应数据排序非常复杂(
id
字段已尝试)。
我期望干净的结果是使用像 tie_breaker_field
这样的东西,比如 ElasticSearch 引擎提供的。它与 pit_id
相关联,并且对于当前 pit_id
数据集具有唯一值。
如果在 OpenSearch 中没有执行此操作的基本方法,是否可以生成一些独特的值来模仿 tie_breaker_field
将其绑定到 pit_id
?
下面是我使用的请求体原型:
<CURLOPT_POSTFIELDS> = [
"size" => <int>,
"from" => <int>,
"pit" => [
"id" => <pit_id>
],
"query" => [...],
"sort" => [
'update_at' => 'asc'
],
];