就你而言,如果你的id
字段包含唯一值并且具有类型keyword
(或数字)那么你绝对没问题,可以使用它来分页search_after
.
因此,第一个电话将是您问题中的电话:
{
"size": 10,
"query": {
"match" : {
"title" : "elasticsearch"
}
},
"sort": [
{"id": "asc"},
{"score": "desc"}
]
}
在你的回复中,你需要查看最后一次点击并采取sort
最后一次点击的值:
{
"_index" : "myindex",
"_type" : "_doc",
"_id" : "100000012",
"_score" : null,
"_source": { ... },
"sort" : [
"100000012", <--- take this
"98" <--- take this
]
}
然后在下一次搜索调用中,您将在中指定该值search_after
{
"size": 10,
"query": {
"match" : {
"title" : "elasticsearch"
}
},
"search_after": [ "100000012", "98" ], <--- add this
"sort": [
{"id": "asc"}
]
}
下一个结果集的第一个命中将是id: 100000013
。就是这样。没有更多的事情了。
你所指出的问题与你无关如果你总是用 full 排序id
values。它的工作原理是你总是使用最后一个id
先前结果的值。如果你要添加"search_after": ["1000"]
那么你就会遇到他们提到的问题,但你没有理由这样做。