azure搜索围绕$skip限制工作

azure搜索围绕$skip限制工作,azure,azure-cognitive-search,Azure,Azure Cognitive Search,我正在做一项工作,检查我数据库中的所有记录是否都存在于Azure Search上(大约610k)。但是$skip参数有100000个限制。是否有办法解决此限制?您不能将超过10万份感谢文档分面,但是,您可以添加分面来解决此问题。例如,假设您有一个名为Country的方面,没有一个方面的文档超过10万个。您可以在Country=='Canada'的地方对所有文档进行分面,然后在Country=='USA'的地方对所有文档进行分面。我使用datametadata\u storage\u last\u

我正在做一项工作,检查我数据库中的所有记录是否都存在于Azure Search上(大约610k)。但是$skip参数有100000个限制。是否有办法解决此限制?

您不能将超过10万份感谢文档分面,但是,您可以添加分面来解决此问题。例如,假设您有一个名为Country的方面,没有一个方面的文档超过10万个。您可以在Country=='Canada'的地方对所有文档进行分面,然后在Country=='USA'的地方对所有文档进行分面。

我使用datametadata\u storage\u last\u 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"
当跳过reachAzureSearchSkipLimit时,则从数据末尾获取元数据存储上次修改的时间。并将上次修改的元数据存储作为下一个100k搜索文件

filter = metadata_storage_last_modified lt ${metadata_storage_last_modified}

只是为了澄清其他答案:你不能直接绕过限制,但你可以使用变通方法

以下是您可以做的:

1) 将唯一字段添加到索引中。内容可以是修改时间戳(如果其粒度足以使其唯一),或者例如运行编号。或者,您也可以为此使用一些现有的唯一字段

2) 从按唯一字段排序的索引中获取前100000个结果

3) 检查您的唯一字段的结果中的最大值(如果按升序排列)是多少-因此最后一个条目的值是多少

4) 通过基于相同的唯一字段进行排序,并添加一个仅在唯一字段的值大于上一个最大值时才获取结果的过滤器,获取下一个100000个结果。通过这种方式,不会返回相同的前100000个值,但我们会得到接下来的100000个值

5) 继续,直到得到所有结果

缺点是,除非在获得结果后进行排序,否则不能对结果使用其他自定义排序