elasticsearch - search_after 在elasticsearch中通过向后分页给出错误结果
问题描述
使用elasticsearch,我试图在search_after 的帮助下实现分页。当我进行反向分页时,我遇到了一个问题,即。结果错误(与上一页的实际结果不同)。
对于前向分页,我使用弹性查询如下...
{
"sort": [{
"_score": "desc"
}, {
"last_login": {
"order": "desc",
"mode": "avg"
}
}, {
"id": {
"order": "asc"
}
}],
"search_after": [148853, 1563037185, "3591152"],
"from": 0,
"_source": [],
"track_total_hits": true,
"track_scores": true,
"aggs": {},
"query": {
"bool": {
"filter": {
"bool": {
"should": [],
"must_not": [],
"must": []
}
},
"should": [],
"must_not": [],
"must": []
}
},
"size": 25
}
注意:这里的 search_after 值是当前分页中最后一个文档的排序数组。
为了进行反向分页,
我只是颠倒线程弹性讨论中提到的排序选项的排序顺序。我的弹性查询现在如下...
{
"sort": [{
"_score": "asc"
}, {
"last_login": {
"order": "asc",
"mode": "avg"
}
}, {
"id": {
"order": "desc"
}
}],
"search_after": [146923, 1561460886, "3275906"],
"from": 0,
"_source": [],
"track_total_hits": true,
"track_scores": true,
"aggs": {},
"query": {
"bool": {
"filter": {
"bool": {
"should": [],
"must_not": [],
"must": []
}
},
"should": [],
"must_not": [],
"must": []
}
},
"size": 25
}
这里 search_after 是当前分页中最后一个文档的排序数组中的值。这一次不是显示上一页的结果,而是弹性给出了一些其他的结果。
注意:Elasticsearch 版本 7.2
注意:弹性搜索没有实时更新或索引。
更新:如果我给出当前页面的第一个文档并反转弹性搜索结果,那么我将得到上一页(不使用 _score 作为排序参数)。但是,当根据分数启用排序时,我又得到了一个完全错误的结果。
解决方案
推荐阅读
- c# - 集合包含的 C# LINQ
- csv - Pyspark 在数据帧中删除标头,AttributeError:_jdf
- flask - 如何在 Flask 中将下拉值存储到 DB
- java - Android getIntent().getExtra() 返回 null
- prolog - Prolog:将传递关系的结果存储到列表中
- reactjs - 在副作用中使用全球化 Redux 选择器会创建循环依赖
- r - 原始(二进制)数据太大而无法写入磁盘。如何将块写入磁盘(附加)?
- c# - C#如何从datagridview中删除项目(当前项目不能从列表中删除,因为没有当前项目)
- jquery - 数据表单元格中带有引导工具提示的按钮 [不工作]
- python - 递归修改形状不规则的列表