Solr 光标标记和分页
Solr cursor marker and pagination
我想在我的网站上使用 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 行,获取 nextCursorMark,然后将其用于另一个只有 20 行的查询?
我觉得 运行 一些 20000 行的查询只是为了获得 nextCursorMark 有点奇怪。这是正确的做法吗?
如果,例如您有 10 个页面,用户想从第 1 页点击第 5 页,我是否需要手动浏览每一页才能到达那里?
编辑:
我读过这个:How to manage "paging" with Solr?
试图找到一个工作示例但找不到。
cursorMark
告诉 Solr 它应该从哪里开始下一个响应。它类似于第一个示例中的 start
参数。当您对结果进行分页时,每个响应的 cursorMark
会显示下一页的开始位置。
如果您只是在寻找 "what is the first result on page 1001",第一个版本就可以正常工作。如果您对结果进行分页 - 用户可能会或可能不会转到下一页,使用 cursorMarks 的要点是每个节点(或在单个节点设置中)知道哪个文档是最后显示的文档,因此,每个节点的当前位置只能 return rows
个文档。如果您要执行第一个版本,则每个节点都必须 return start
+ rows
文件。因此,您无需尝试找出 "which documents are the ten ones after 20001",只需回答 "which documents are the next ten after this sort key".
此外,cursorMarks 可以更好地处理结果集的更新,因为您可以避免对结果集进行任何更改,这些更改会将已经显示的文档推回您正在显示的下一页。
请参阅 the reference guide for complete examples 和更多说明。
我想在我的网站上使用 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 行,获取 nextCursorMark,然后将其用于另一个只有 20 行的查询?
我觉得 运行 一些 20000 行的查询只是为了获得 nextCursorMark 有点奇怪。这是正确的做法吗?
如果,例如您有 10 个页面,用户想从第 1 页点击第 5 页,我是否需要手动浏览每一页才能到达那里?
编辑:
我读过这个:How to manage "paging" with Solr?
试图找到一个工作示例但找不到。
cursorMark
告诉 Solr 它应该从哪里开始下一个响应。它类似于第一个示例中的 start
参数。当您对结果进行分页时,每个响应的 cursorMark
会显示下一页的开始位置。
如果您只是在寻找 "what is the first result on page 1001",第一个版本就可以正常工作。如果您对结果进行分页 - 用户可能会或可能不会转到下一页,使用 cursorMarks 的要点是每个节点(或在单个节点设置中)知道哪个文档是最后显示的文档,因此,每个节点的当前位置只能 return rows
个文档。如果您要执行第一个版本,则每个节点都必须 return start
+ rows
文件。因此,您无需尝试找出 "which documents are the ten ones after 20001",只需回答 "which documents are the next ten after this sort key".
此外,cursorMarks 可以更好地处理结果集的更新,因为您可以避免对结果集进行任何更改,这些更改会将已经显示的文档推回您正在显示的下一页。
请参阅 the reference guide for complete examples 和更多说明。