我目前有一个模拟帐户。我正在尝试使用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/

10-11 08:37