Azure搜索索引 - 查找项目列表

问题描述 投票:0回答:2

我们正在使用搜索索引来运行我们的API之一。使用从数据库中提取数据的Azure函数填充索引的数据。我们可以看到数据库和搜索服务中的记录数量不同。有没有办法获取搜索服务中的密钥列表,以便我们可以与数据库进行比较,看看哪些密钥丢失了?

问候,

约翰

c# azure azure-search azure-search-.net-sdk
2个回答
2
投票

Azure搜索查询API专为搜索/过滤方案而设计,它不提供遍历所有文档的有效方法。

也就是说,您可以通过按顺序扫描键来合理地执行此操作:如果索引中有一个字段(键字段或另一个字段)既可过滤又可排序,则可以使用$ select仅为每个文档提取键,一次1000个,由该字段排序。在检索前1000后,不要执行$ skip(这将限制为100,000),而是使用在前一个响应中看到的最高值,使用大于该字段的过滤器。这将允许您以合理的性能遍历整个集合,尽管一次完成1000次需要花费时间。


0
投票

您可以尝试搜索“*”。并使用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}
© www.soinside.com 2019 - 2024. All rights reserved.