Solr光标标记和分页

时间:2016-06-13 13:08:50

标签: solr pagination cursor

我想将Solr用作我的网站作为搜索引擎,我试图理解基本分页和使用游标标记的深度分页之间的区别。

据我了解,如果您使用基本分页并查询页面1001,每页有20个结果,则会发生这种情况:

  • Solr将找到第一个1000 * 20匹配结果
  • 显示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?

而且:https://lucidworks.com/blog/2013/12/12/coming-soon-to-solr-efficient-cursor-based-iteration-of-large-result-sets/

试图找到一个有效的例子但不能。

1 个答案:

答案 0 :(得分:2)

cursorMark告诉Solr它应该在哪里开始下一个响应。它类似于第一个示例中的start参数。在您对结果进行分页时,每个回复cursorMark都会显示下一页的开始位置。

如果你只是在寻找"第1001页和第34页的第一个结果是什么,第一个版本就可以了。如果您对结果进行分页 - 如果用户可能会或可能不会转到下一页,则使用cursorMarks的要点是每个节点(或在单个节点设置中)知道哪个文档是最后一个显示,因此,每个节点只能从当前位置返回rows个文档。如果您要执行第一个版本,则每个节点都必须返回start + rows个文档。因此,不要试图找出"哪些文件是20001"之后的十个文件,你只需要回答"这个文件是这个排序键之后的下一个文件"。

此外,cursorMarks可以更好地处理结果集的更新,因为您可以避免对结果集进行任何更改,从而将已经显示的文档推回到您正在显示的下一页中。

请参阅the reference guide for complete examples及其他说明。