我们正在使用搜索索引来运行我们的API之一。使用从数据库中提取数据的Azure函数填充索引的数据。我们可以看到数据库和搜索服务中的记录数量不同。有没有办法获取搜索服务中的密钥列表,以便我们可以与数据库进行比较,看看哪些密钥丢失了?
问候,
约翰
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
因为跳过限制是100k,所以我们可以计算跳过
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}