我目前有一个模拟帐户。我正在尝试使用SwifType为雇主创建POC。我们有一个非常大的数据库,该数据库每1小时创建一次indexec并创建一个JSON文件。考虑到它只是在生成字符串时发送字符串的主键,因此我认为与Elastic集成将非常容易。我使用PHP Curl并连接到API。代码发送出部分数据,然后出现“超出速率限制”错误。
如何解决该错误并获得完整的JSON索引?
此刻我的代码如下:
// SENDING DATA TO ELASTIC SEARCH
$arr = array_change_key_case($arr, CASE_LOWER); // Keys to lower case
$arrlist = array_chunk($arr,100); // Split to chunks of 100
foreach($arrlist as $key=>$arr){
$json = json_encode($arr); // Making the JSON string from the array
$ch = curl_init('https://host-***.api.swiftype.com/api/as/v1/engines/***/documents');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer private-***';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
echo $result."<hr>";
}
此外,考虑到此代码将每小时索引一次,如果我要反复发送相同的数据,它将更新前一个还是重复它?如果是这样,我该如何处理?
答案 0 :(得分:0)
当X-RateLimit-Remaining
标头达到0(或接近0)或收到429响应时,您需要查看sleep()
标头(请参见详细信息here),unfold
和然后重试。如果您连续收到多个429响应,我建议您使用exponential backoff(每次收到429的睡眠时间都要加倍,请在请求成功后将其重置为默认值)。