我使用 GuzzleHttp 通過“_bulk”將資料發送到彈性搜索索引。它只是一個包含 850 條記錄的小型資料集。當我逐條傳輸資料記錄時,我收到 17 條記錄的錯誤訊息。這對我來說很好,所以我可以修復錯誤。
但是當我使用 _bulk 時,我根本沒有收到任何錯誤訊息。17 條不正確的記錄被忽略并且在索引中丟失。如何在此處收到錯誤訊息?有一些我可以使用的選項嗎?有任何想法嗎?
終點是:
這是我的主要代碼部分:
$jsonData = "xxxxx"; // the payload for the request
$elasticUrl = "https://xxxx.xx/xxxxx/_doc/_bulk";
$client = new Client([
"verify" => false, // disable ssl certificate verification
"timeout" => 600, // maximum timeout for requests
"http_errors" => false // disable exceptions
]);
$header = ["Content-Type" => "application/json"];
$result = $client->post($elasticUrl,
[
"headers" => $header,
"body" => $jsonData
]
);
if ($result->getStatusCode() != 200) {
$ret = "Error ".$result->getStatusCode()." with message: ".$result->getReasonPhrase();
}
uj5u.com熱心網友回復:
批量請求將始終使用 HTTP 200 成功。
但是,在批量回應中,您應該會看到每個專案是否成功的指示。如果您errors: true在回應中看到,那么您知道某些專案無法被索引并查看items陣列,您會發現相應專案的錯誤。
uj5u.com熱心網友回復:
正如@Val 指出的那樣,使用$response->getBody()提供了所需的資訊:
$body = (string) $result->getBody();
$bodyArray = json_decode($body, true);
if ($bodyArray["errors"]) {
$retArray = [];
foreach ($bodyArray["items"] as $key => $item) {
if (isset($item["create"]["error"])) {
$retArray[] = $item["create"]["error"]["reason"].": ".json_encode($data[$key]);
}
}
$ret = implode(", ", $retArray);
}
作為旁注:在$data將資料發送到 Elastic Search 之前,我將資料保存為 php 陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/517318.html
標籤:弹性搜索块
上一篇:用于http_forwared_for的Logstashnginx決議器
下一篇:試圖將/webhooks/agentcrm/contacts/index.php?id=V8vkUHkCN0dwBYvTVgKr轉換為/webhooks/agentcrm/contacts/V8vkU
