solr使用cursorMark做深度分页

来源:互联网 发布:怎么在淘宝上做充值 编辑:程序博客网 时间:2024/06/06 09:08
深度分页
深度分页是指给搜索结果指定一个很大的起始位移。
普通分页在给定一个大的起始位移时效率十分低下,例如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高效地往回翻页。
0 0
原创粉丝点击