如指定的here游标是无状态的,但如果它是无状态的,我不知道它如何解决深度分页问题。 Solr是否按唯一键字段按顺序存储索引数据,如果这样,它将澄清我的困惑。
如果我错了,请解释一下游标如何解决深度分页。因为游标是无状态的,所以每次请求查询时也需要对游标进行排序和区分,这类似于start =#start-position。
最佳答案
从您引用的链接...
Solr中的游标是一个逻辑概念,它不涉及在服务器上缓存任何状态信息。取而代之的是,返回给客户端的最后一个文档的排序值用于计算“标记”,该“标记”表示排序值的有序空间中的逻辑点。可以在后续请求的参数中指定该“标记”,以告诉Solr从何处继续。
在解释使用cursorMark的约束时将对此进行详细说明。
光标标记值是基于结果中每个文档的排序值计算的,这意味着具有相同排序值的多个文档如果其中一个是结果页面上的最后一个文档,则将产生相同的光标标记值。在这种情况下,使用该cursorMark的后续请求将不知道应跳过具有相同mark值的文档。要求将uniqueKey字段用作排序条件中的子句,可确保将返回确定性排序,并且每个cursorMark值将标识文档序列中的唯一点。
如果这不能帮助您澄清问题,那么我可以提供的下一个最佳解释是将cursorMark视为编码的过滤器,告诉Solr跳过排序字段中“之前”(基于)的所有文档在asc / desc排序顺序上)的一些特定值。