2016-06-13 71 views
1

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

据我了解,如果您使用基本分页和每页20个结果查询1001的页面会出现这种情况:

  • 的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行的第一个查询,获取下一个CursorMark,然后与另一个只有20行的查询使用它?

我发现用20000行运行某个查询以获得下一个CursorMark有点奇怪。这是做正确的方法吗?

那么,如果您有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

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

如果您只是在寻找“第1001页的第一个结果是什么”,那么第一个版本就可以正常工作。如果您通过结果进行分页 - 用户可能会也可能不会进入下一页,关于使用cursorMark的一点是,每个节点(或单个节点设置中)都知道哪个文档是最后一个要显示的文档,因此每个节点只能从当前位置返回rows个文档。如果您要做第一个版本,每个节点将不得不返回start + rows文档。因此,您不必试图找出“哪些文档是20001之后的十个文档”,您只需要回答“哪些文档是该排序键后的十个文档”。

此外cursorMarks处理更新的结果集更好,因为你避免将推动那些已经被证明回你显示下一个页面文件的任何修改的结果集。

the reference guide for complete examples,并进一步说明。

+0

谢谢你的链接。我通过它的文档阅读了很多,但由于某种原因找不到那篇文章。因此,举例来说,如果我想创建分页,我会需要经过所有的结果第一,让所有的cursorMarks并与页码绑定呢?如果我有1000页,我不会在分页显示1000个按钮,但也许我想要一个链接到最后一页或最后2-3页。是通过所有结果并将光标绑定到每个页面按钮的最佳解决方案吗? –

+0

不,这个想法是,你用cursorMark的人是通过你的结果集分页。文件总数可以被检索一次,以产生分页信息(“哦,有可用于该查询5000个文档)。要直接跳到文档x个,做分页可能会更好(或者你可以使用cursorMark的传统方式具有更多行数,然后将自己分页到该结果集中)。 – MatsLindh