在Elasticsearch中使用向后分页给出错误的结果后的search_after

时间:2019-07-17 11:56:27

标签: elasticsearch pagination

借助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结果,那么我将获得前一页。 但是,基于分数启用排序时,我再次得到错误的结果。

0 个答案:

没有答案