1

我们正在使用搜索索引来运行我们的 API 之一。使用从数据库中提取数据的 Azure 函数填充索引的数据。我们可以看到数据库和搜索服务中的记录数是不同的。有什么方法可以获取 Search Service 中的键列表,以便我们可以与数据库进行比较并查看缺少哪些键?

问候,

约翰

4

2 回答 2

2

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

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

于 2017-08-15T00:59:19.350 回答
1

您可以尝试搜索“*”。并通过以下示例使用 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}
于 2019-03-28T22:21:28.113 回答