借助elasticsearch,我试图在search_after的帮助下实现分页。我在执行向后分页时遇到问题,即。错误的结果(与上一页的实际结果不同)。
对于前向分页,我使用弹性查询,如下所示...
{
"sort": [{
"threshold": "desc"
}, {
"last_login": {
"order": "desc",
"mode": "avg"
}
}, {
"id": {
"order": "asc"
}
}],
"search_after": ["0", 1563037185, "3591152"],
"from": 0,
"_source": [],
"track_total_hits": true,
"track_scores": false,
"aggs": {},
"query": {
"bool": {
"filter": {
"bool": {
"should": [],
"must_not": [],
"must": []
}
},
"should": [],
"must_not": [],
"must": []
}
},
"size": 25
}
注意:此处的search_after值是当前分页中最后一个文档的排序数组。
要进行反向分页,
我只是颠倒了线程elastic discussion中提到的排序选项的排序顺序。 现在,我的弹性查询如下...
{
"sort": [{
"threshold": "asc"
}, {
"last_login": {
"order": "asc",
"mode": "avg"
}
}, {
"id": {
"order": "desc"
}
}],
"search_after": ["0", 1561460886, "3275906"],
"from": 0,
"_source": [],
"track_total_hits": true,
"track_scores": false,
"aggs": {},
"query": {
"bool": {
"filter": {
"bool": {
"should": [],
"must_not": [],
"must": []
}
},
"should": [],
"must_not": [],
"must": []
}
},
"size": 25
}
在此,search_after是当前分页中最后一个文档的排序数组中的值。 这次,elastic不再显示前一页结果,而是给出了其他结果。
注意:Elasticsearch 7.2版
注意:elasticsearch没有实时更新或索引。
更新:如果我从当前页面给出第一个文档并反转elasticsearch结果,那么我将获得前一页。 但是,基于分数启用排序时,我再次得到错误的结果。