陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万
深度分页
深度分页是指给搜索结果指定一个很大的起始位移。
普通分页在给定一个大的起始位移时效率十分低下,例如start=1000000,rows=10的查询,搜索引擎需要找到前1000010条记录然后再返回最后10条。Solr为了最后10条记录只会检索排序字段,但是前1000010条记录的内部排序开销依然十分大。
普通分页基础上的深度分页对分布式搜索引擎而言甚至是更低效的,因为为了找到正确的10条记录,来自各个分片的前1000010条记录的排序字段需要被返回和聚合在一个聚合节点。
 
使用cursorMark(游标记录)
cursorMark参数允许高效地在大结果集上遍历。它可以在单点或分布式搜索引擎上工作。
怎样使用cursorMark:
1.排序必须包括id字段的严格排序策略,这防止了用lucene记录id做内部排序导致的排序中存在相等的情况。
2.任何包括cursorMark的调用start字段必须是0。
3.第一次请求时传递cursorMark=*。
4.Solr的返回结果中会有nextCursorMark,在下次调用时简单地使用这个值作为cursorMark以继续结果集的分页。
 
深度分页curosrMark实现时要注意的点
1.cursorMark参数自身包含了所有的必要状态,没有服务端的状态。
2.start参数总是返回0,这取决于客户端指出要展示的是什么位置。
3.没必要使用cursorMark排序到底,因为服务端没有保存状态,随时都可以终止排序。
4.你有两种方法知道搜索结果的排序到底了,没有返回和你请求的一样的行数,或者返回的coursorMark和你传递的一样(此时返回的行数为0)。
5.尽管start参数必须是0,每次调用都可以变换row值。
6.修改返回字段和facet字段时,cursorMark也是可以重用的。
7.客户端可以通过再次提交之前的cursorMark高效地往回翻页。
posted on   宏宇  阅读(485)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2008-08-21 vs2005 Team System的版本
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示