zoukankan      html  css  js  c++  java
  • solr使用cursorMark做深度分页

    深度分页
    深度分页是指给搜索结果指定一个很大的起始位移。
    普通分页在给定一个大的起始位移时效率十分低下,例如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高效地往回翻页。
  • 相关阅读:
    Windows 系统变量大全
    linux编程
    CSS 对齐操作
    php 和 表单 简单交互
    HTML <input> placeholder 属性
    HTML <label> 标签
    Chap-4 Section 4.4 C++相关问题
    Chap-4 Section 4.3 COMMON块
    Chap-4 Section 4.2.4 指令修正方式
    Chap-4 Section 4.2.3 符号解析
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/9510810.html
Copyright © 2011-2022 走看看