为什么 ContinuationToken 不能用于 Azure 搜索 API 中的分页?

2023-12-21

阅读 Azure Search .NET SDK 的文档,我发现 ContinuationToken 属性不应该用于分页(这与@odata.nextLink and @search.nextPageParameterREST API 中的属性)。

请注意,此属性并不旨在帮助您实现搜索结果分页。您可以使用“顶部”和“跳过”搜索参数来实现分页。Source https://learn.microsoft.com/dotnet/api/microsoft.azure.search.models.documentsearchresultbase-2.continuationtoken?view=azure-dotnet

为什么我不能用它来分页?我遇到一种情况,我想运行查询,然后逐页逐步浏览结果的静态副本。然而,当我浏览它们时,随着新文档添加到底层数据库中,我不希望这些查询结果在我脚下发生变化。就我而言,在提交初始查询和导航到另一个页面之间的一两分钟内可能会添加数百或数千个结果。我怎样才能做到这一点?


您的问题可以分两部分来解答:

  1. 为什么不建议使用ContinuationToken实现分页?
  2. 如何实现分页以使页面之间的结果保持完全稳定?

这些实际上是不相关的问题,因为没有关于ContinuationToken保证了搜索结果的稳定性。 Azure 搜索不保证分页的一致性,无论您是否使用$top and $skip or ContinuationToken.

对于问题#1,原因ContinuationToken不建议进行分页的原因是 Azure 搜索控制何时返回令牌,而不是您的应用程序代码。如果你对 Azure 搜索决定如何以及何时返回令牌做出假设,那么这些假设可能会随着未来的服务更新而被打破。的意图ContinuationToken是为了防止请求太多文档而导致服务不堪重负,因此您应该假设服务是否会返回令牌完全取决于服务。

对于问题 2,由于 Azure 搜索不提供一致性保证,因此您无法完全避免诸如同一文档出现在多个页面中、文档丢失或在结果中看到文档时已被删除等问题。即使您想构建自己的结果快照并在应用程序代码中对它们进行分页,构建一致的快照一开始也是不可能的。但是,如果您唯一关心的是避免在结果中显示新文档,则可以在索引中包含创建的时间戳字段,并在每个搜索请求中对其进行过滤。

坦率地说,除非您尝试导出索引的全部内容,否则我会质疑分页是否需要如此强大的一致性保证。谷歌和必应没有做出这样的保证,因此可以说用户的期望已经围绕这一点设定了。如果您想导出数据,不幸的是,现在的 Azure 搜索并不容易做到这一点。在这种情况下,请对此进行投票用户声音 https://feedback.azure.com/forums/263029-azure-search/suggestions/8631079-export-import-search-indexes帮助团队优先考虑此场景的项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 ContinuationToken 不能用于 Azure 搜索 API 中的分页? 的相关文章

随机推荐

  • 如何协调抽屉式导航与底部导航视图

    我对 Android 开发还很陌生 我正在检查材料设计库 并实现了一个带有底部导航的导航抽屉 可以轻松地浏览片段 这两个组件都工作得很好 但我不知道如何协调这两个组件的导航 例如 当在导航抽屉上切换片段时 它会更改布局 但按钮导航所选项目不
  • 加载页面后导航栏活动选项不会保持活动状态

    我的代码中有一个导航栏 它位于 ejs 文件名 nav ejs 中
  • Powershell获取Windows中显示的区分大小写的路径

    我正在寻找一种方法来获取本地路径 其中包括名称中使用的任何驼峰式大小写 主要原因是我可以使用相同的路径在 Windows wsl 中进行调用 例如 在 Windows 中我可以将文件称为 c FoO bar txt c Foo Bar tx
  • 如何将配对列表添加到自动模式列表中?

    我有一长串文件和文件扩展名 我希望 Emacs 在 ruby 模式下自动打开它们 从使用谷歌来看 最基本的解决方案是这样的 setq auto mode alist cons rake ruby mode auto mode alist s
  • 填充 WCF 中的 PrimaryIdentity

    我使用简单的 HTTP 标头将令牌传递给 WCF 服务进行身份验证 WCF 服务需要使用 basicHTTPBinding 因此遗憾的是我无法使用固定的 ws security 实现 我想填充 PrimaryIdentity 对象 以便 W
  • 相当于字节数组的 StringBuilder

    这是一个简单的问题 我认为应该已经得到解答 我确实尝试在这里找到答案 但没有找到任何答案 所以如果我错过了什么 我深表歉意 不管怎样 除了字节数组之外 是否有 StringBuilder 的等价物 我不关心所有不同的超载Append 但我想
  • 从 eclipse 创建 JAR 时如何在清单文件中设置类路径?

    I am trying to creat JAR file through eclipse I read some of the threads from stackoverflow 以及其他论坛 但没有任何帮助 我创建了一个像这样的单独的
  • React.js 将文本渲染为 HTML

    这就是渲染代码现在的样子 我知道这样做是不安全的 render function return div p p div 问题是如何安全地渲染它 参考https facebook github io react docs dom elemen
  • 将变量名传递给 R 中的函数

    我注意到很多包允许您传递符号名称 这些名称在调用函数的上下文中甚至可能无效 我想知道它是如何工作的以及如何在我自己的代码中使用它 这是 ggplot2 的示例 a lt data frame x 1 10 y 1 10 library gg
  • 如何使用spring集成在TCP连接上实现保活连接?

    我有一个使用 spring 集成 TCP 构建的 TCP 客户端 服务器支持保持活动消息 ping pong 风格 连接是使用配置的CachingClientConnectionFactory我想利用这个服务器功能 这是我的 bean 配置
  • 如何在 scandir() php 中添加分页 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在我的 scandir php 代码中添加分页 请帮助我如何在我的 php 代码中添加分页 这是我的代码
  • 带输出的冒泡排序

    所以我对其进行了一些编辑 并且几乎得到了我想要的结果 我现在遇到的唯一问题是我得到了一行我不想要的输出 我觉得这里的修复很简单 但我的大脑现在很混乱 static void bubbleSort int myArray int n myAr
  • 使用 Mantle 将 JSON 数组中的 NSString 转换为 NSURL

    假设给我的是以下 JSON 响应 images http domain com image1 jpg http domain com image2 jpg http domain com image3 jpg 使用 Mantle 我想解析这
  • 如何将图像与boost gil结合?

    我刚刚熟悉 Boost GIL 以及一般的图像处理 并怀疑这很简单 但我还没有找到相关文档 我有一组图像视图 我想将它们与任意函数结合起来 为简单起见 假设图像已对齐 相同大小和定位器类型 我只想将像素值添加在一起 一种方法是从 zip i
  • XML解析VBA excel(函数行,&MSXML2.DOMDocument)

    我需要解析数百个具有相同结构的 XML 文件 如下所示
  • SQLite 问题,转义某些字符

    我正在开发我的第一个数据库应用程序 它是一个使用 SQLite 数据库用 C 编写的 WinForms 应用程序 我遇到了一些问题 当使用撇号时 我的 SQLite 查询失败 这是我的查询的结构 string SQL UPDATE SUBC
  • 在 LINUX 服务器中的 XAMPP 服务器中安装 Solr

    我尝试将 Solr PHP 扩展安装到我的网络服务器 我已经有一个 XAMPP 服务器 并且正在使用 PECL 来安装 solr cd opt lampp bin sudo pecl install solr 1 0 1 但我收到以下错误
  • 为什么元组的项目是只读的?

    我想用Tuple类来存储我的程序中需要的 2 个整数信息 StartAddress EndAddress 但我发现Tuple项目是只读的 因此如果我需要为项目设置值 我需要重新实例化一个元组 这个设计决定背后的原因是什么 元组起源于函数式编
  • 错误:C 堆栈使用量太接近限制

    我试图在 R 中运行一些相当深的递归代码 但它一直给我这个错误 错误 C 堆栈使用量太接近限制 我的输出来自CStack info is Cstack info size current direction eval depth 67108
  • 为什么 ContinuationToken 不能用于 Azure 搜索 API 中的分页?

    阅读 Azure Search NET SDK 的文档 我发现 ContinuationToken 属性不应该用于分页 这与 odata nextLink and search nextPageParameterREST API 中的属性