我目前有一个模拟帐户。我正在尝试使用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(或接近它)或收到429响应时,您需要查看X-RateLimit-Remaining
header (请参阅详细信息here),然后使用sleep()
然后重试。如果您连续收到多个429响应,则建议使用exponential backoff(每次收到429时的睡眠时间都要加倍,当请求成功时将其重置为默认值)。
关于elasticsearch - SwifType超出速率限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58432793/