天蓝色搜索围绕 $skip 限制工作
azure search work around $skip limit
我正在检查我数据库中的所有记录是否都存在于 Azure 搜索中(大约 610k)。但是 $skip 参数有 100000 的限制。有没有办法绕过这个限制?
您不能对超过 100K 的文档进行分面处理,但是,您可以添加分面来解决此问题。例如,假设您有一个名为 Country 的方面,并且没有一个方面的文档超过 100K。您可以对所有国家 == ‘加拿大’ 的文档进行分面,然后对国家 == ‘美国’ 的所有文档进行分面,等等……
我使用数据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"
当 skip 达到 AzureSearchSkipLimit 时,则从数据结束获取 metadata_storage_last_modified 时间。并将 metadata_storage_last_modified 作为下一个 100k 搜索文件管理器。
filter = metadata_storage_last_modified lt ${metadata_storage_last_modified}
只是为了澄清其他答案:您不能直接绕过限制,但可以使用变通方法。
您可以执行以下操作:
1) 向索引添加一个唯一字段。内容可以是修改时间戳(如果它足够精细以使其唯一)或例如 运行 数字。或者您可以为此使用一些现有的唯一字段。
2) 从您的唯一字段排序的索引中取出前 100000 个结果
3) 检查您的唯一字段结果中的最大值(如果按升序排列)是多少 - 所以最后一个条目的值
4) 通过基于相同的唯一字段进行排序并添加一个过滤器来获取接下来的 100000 个结果,该过滤器仅在唯一字段的值大于先前最大值的情况下获取结果。这样,不会返回相同的前 100000 个值,但我们会得到接下来的 100000 个值。
5) 继续直到获得所有结果
缺点是您不能对结果使用其他自定义排序,除非您在获得结果后进行排序。
我正在检查我数据库中的所有记录是否都存在于 Azure 搜索中(大约 610k)。但是 $skip 参数有 100000 的限制。有没有办法绕过这个限制?
您不能对超过 100K 的文档进行分面处理,但是,您可以添加分面来解决此问题。例如,假设您有一个名为 Country 的方面,并且没有一个方面的文档超过 100K。您可以对所有国家 == ‘加拿大’ 的文档进行分面,然后对国家 == ‘美国’ 的所有文档进行分面,等等……
我使用数据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,所以我们可以通过
来计算skipAzureSearchSkipLimit = 100k
AzureSearchTopLimit = 1k
skip = offset % (AzureSearchSkipLimit + AzureSearchTopLimit)
如果总搜索次数将大于 AzureSearchSkipLimit,则应用
orderby = "metadata_storage_last_modified desc"
当 skip 达到 AzureSearchSkipLimit 时,则从数据结束获取 metadata_storage_last_modified 时间。并将 metadata_storage_last_modified 作为下一个 100k 搜索文件管理器。
filter = metadata_storage_last_modified lt ${metadata_storage_last_modified}
只是为了澄清其他答案:您不能直接绕过限制,但可以使用变通方法。
您可以执行以下操作:
1) 向索引添加一个唯一字段。内容可以是修改时间戳(如果它足够精细以使其唯一)或例如 运行 数字。或者您可以为此使用一些现有的唯一字段。
2) 从您的唯一字段排序的索引中取出前 100000 个结果
3) 检查您的唯一字段结果中的最大值(如果按升序排列)是多少 - 所以最后一个条目的值
4) 通过基于相同的唯一字段进行排序并添加一个过滤器来获取接下来的 100000 个结果,该过滤器仅在唯一字段的值大于先前最大值的情况下获取结果。这样,不会返回相同的前 100000 个值,但我们会得到接下来的 100000 个值。
5) 继续直到获得所有结果
缺点是您不能对结果使用其他自定义排序,除非您在获得结果后进行排序。