我们正在使用搜索索引来运行我们的 API 之一。使用从数据库中提取数据的 Azure 函数填充索引的数据。我们可以看到数据库和搜索服务中的记录数是不同的。有什么方法可以获取 Search Service 中的键列表,以便我们可以与数据库进行比较并查看缺少哪些键?
问候,
约翰
我们正在使用搜索索引来运行我们的 API 之一。使用从数据库中提取数据的 Azure 函数填充索引的数据。我们可以看到数据库和搜索服务中的记录数是不同的。有什么方法可以获取 Search Service 中的键列表,以便我们可以与数据库进行比较并查看缺少哪些键?
问候,
约翰
Azure 搜索查询 API 专为搜索/筛选方案而设计,它不提供遍历所有文档的有效方法。
也就是说,您可以通过按顺序扫描键来合理地做到这一点:如果您的索引中有一个字段(键字段或另一个字段)既可过滤又可排序,您可以使用 $select 仅提取每个文档的键,一次 1000 个,按该字段排序。检索到前 1000 个后,不要执行 $skip(这会将您限制为 100,000),而是使用对字段使用大于的过滤器,使用您在上一个响应中看到的最大值。这将允许您以合理的性能遍历整个集合,尽管一次执行 1000 个需要时间。
您可以尝试搜索“*”。并通过以下示例使用 orderby 和 filter 获取所有数据。我使用数据metadata_storage_last_modified作为过滤器。
offset skip time
0 --%--> 0
100,000 --%--> 100,000 getLastTime
101,000 --%--> 0 useLastTime
200,000 --%--> 99,000 useLastTime
201,000 --%--> 100,000 useLastTime & getLastTime
202,000 --%--> 0 useLastTime
因为Skip limit是100k,所以我们可以计算skip
AzureSearchSkipLimit = 100k
AzureSearchTopLimit = 1k
skip = offset % (AzureSearchSkipLimit + AzureSearchTopLimit)
如果总搜索计数大于AzureSearchSkipLimit,则应用
orderby = "metadata_storage_last_modified desc"
当跳过到达AzureSearchSkipLimit时,从数据末尾获取metadata_storage_last_modified时间。并将metadata_storage_last_modified作为下一个 100k 搜索文件管理器。
filter = metadata_storage_last_modified lt ${metadata_storage_last_modified}