我想将Solr用作我的网站作为搜索引擎,我试图理解基本分页和使用游标标记的深度分页之间的区别。
据我了解,如果您使用基本分页并查询页面1001,每页有20个结果,则会发生这种情况:
我猜问题是当有人点击下一页时。 Solr将首先找到1001 * 20的结果,之后将显示所需的结果。
我没有看到使用大数字进行深度分页的正确示例。只有少数,所以我不确定这一点。有人可以澄清一下吗?
以下示例是否正确?
.../query?q=id:book*&sort=pubyear_i+desc,id+asc&fl=title_t,pubyear_i&rows=1&cursorMark=*
这给了我“nextCursorMark”:“AoJcfCVib29rMg ==”
现在我有了nextCursorMark,我可以去找到我想要的页面。 我现在应该手动浏览页面吗?我应该创建一个循环来搜索我想要的特定页面吗?
或者我应该有20000行的第一个查询,获取nextCursorMark然后将其用于只有20行的另一个查询?
我觉得用20000行运行一些查询只是为了得到nextCursorMark有点奇怪。这是正确的方法吗?
如果您有10页并且用户想要点击第1页的第5页,那该怎么办?我是否需要手动浏览每一页才能到达那里?
编辑:
我读过这个:How to manage "paging" with Solr?
试图找到一个有效的例子但不能。
答案 0 :(得分:2)
cursorMark
告诉Solr它应该在哪里开始下一个响应。它类似于第一个示例中的start
参数。在您对结果进行分页时,每个回复cursorMark
都会显示下一页的开始位置。
如果你只是在寻找"第1001页和第34页的第一个结果是什么,第一个版本就可以了。如果您对结果进行分页 - 如果用户可能会或可能不会转到下一页,则使用cursorMarks的要点是每个节点(或在单个节点设置中)知道哪个文档是最后一个显示,因此,每个节点只能从当前位置返回rows
个文档。如果您要执行第一个版本,则每个节点都必须返回start
+ rows
个文档。因此,不要试图找出"哪些文件是20001"之后的十个文件,你只需要回答"这个文件是这个排序键之后的下一个文件"。
此外,cursorMarks可以更好地处理结果集的更新,因为您可以避免对结果集进行任何更改,从而将已经显示的文档推回到您正在显示的下一页中。