我正在做一项工作,以检查数据库中的所有记录是否都在Azure搜索上(大约610k)。但是$ skip参数限制为100000。有办法解决这个限制吗?
答案 0 :(得分:1)
您不能多谢10万多个文档,但是,您可以添加多方面来解决此问题。例如,假设您有一个称为“国家/地区”的构面,并且没有一个构面的文档超过10万个。您可以在“国家/地区” =“加拿大”的所有文档中查看,然后在“国家/地区” ==“美国”的所有文档中查看,等等……
答案 1 :(得分:0)
我使用数据 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 作为下一个10万个搜索文件。
filter = metadata_storage_last_modified lt ${metadata_storage_last_modified}
答案 2 :(得分:0)
只是为了阐明其他答案:您不能直接绕过限制,但可以使用解决方法。
这是您可以做的:
1)在索引中添加一个唯一字段。内容可以是修改时间戳(如果它足够细致,可以使其唯一)或例如运行编号。或者,您可以为此使用一些现有的唯一字段。
2)从唯一字段的索引中获取前100000个结果
3)检查唯一字段的结果中的最大值(如果顺序升序)-最后一个条目的值
4)通过基于相同的唯一字段进行排序并添加仅在唯一字段的值大于先前最大值的情况下才获得结果的过滤器来获取下一个100000个结果。这样,不会返回相同的前100000个值,但我们将获得下一个100000个值。
5)继续直到获得所有结果
不利之处在于,除非获得结果后再进行排序,否则无法对结果使用其他自定义排序。