我正在尝试使用Java中的Gerrit REST API从具有查询请求的特定分支获取2000更改结果。问题是,无论我添加到查询搜索中,我只获得500个结果。
我已经尝试了here列出的选项,但我没有得到我需要的2000个结果。我还读到了an admin can increase this limit,但更喜欢一种不需要绕道而行的方法 所以我想知道的是:
答案 0 :(得分:1)
使用list changes REST API时,结果将作为ChangeInfo Elements的列表返回。如果结果多于返回的结果,则该列表中的最后一个条目将包含值为_more_changes
的{{1}}字段。然后,您可以再次查询并设置true
选项以跳过您已收到的选项。
答案 1 :(得分:0)
我想为David's great answer添加一个小的解决方法。
如果您要抓取托管在Google服务器上的Gerrit实例(例如Android,Chromium,Golang),您会发现它们会阻止超过10000个结果的查询。你可以检查一下,例如与
curl "https://android-review.googlesource.com/changes/?q=status:closed&S=10000"
我以这种方式解决了问题,我在查询字符串中用before:
and until:
拆分了这些更改列表,例如谎言
_url_/changes/?q=after:{2018-01-01 00:00:00.000} AND before:{2018-01-01 00:59:99.999}
_url_/changes/?q=after:{2018-01-01 01:00:00.000} AND before:{2018-01-01 01:59:99.999}
_url_/changes/?q=after:{2018-01-01 02:00:00.000} AND before:{2018-01-01 02:59:99.999}
等等。我想你应该已经明白了。 ;-)请注意,两个限制(before:
和after:
)都包含在内!每天我都使用David描述的分页。
一个很好的副作用是,您可以跟踪爬网的进度。
我写了一个小Python tool named "Gerry"来抓取开源实例。随意使用,采用它并发送拉请求!
答案 2 :(得分:-2)
我差点遇到同样的问题。但是你没有办法提到你不希望管理员增加查询限制,而且你也不想在计数器的循环中激活其余的查询。我建议你按照第二种方法在带有计数器集的循环中触发查询。这就是我用Java实现其余客户端的方式。
答案 3 :(得分:-3)
第一种方式,您可以请求管理员增加响应中返回的最大值。
第二种方法,你可以在循环之前创建一个计数器,并在计数器低于2000时进行迭代
示例:
int count = 0;
while(count < 2000){
//Here do whatever you need
count += result.length();
}
此致