/**
* @param $documentClass \gromver\platform\common\models\elasticsearch\ActiveDocument
* @return int
* @throws \yii\elasticsearch\Exception
*/
public function upload($documentClass)
{
$bulk = '';
/** @var \yii\db\ActiveRecord|string $modelClass */
$modelClass = $documentClass::model();
/** @var \gromver\platform\common\models\elasticsearch\ActiveDocument $document */
$document = new $documentClass();
$uploaded = 0;
foreach ($modelClass::find()->each() as $model) {
/** @var \yii\db\ActiveRecord $model */
$action = Json::encode(["index" => ["_id" => $model->getPrimaryKey(), "_type" => $documentClass::type(), "_index" => $documentClass::index()]]);
$document->loadModel($model);
$data = Json::encode($document->toArray());
$bulk .= $action . "\n" . $data . "\n";
$uploaded++;
}
$url = [$documentClass::index(), $documentClass::type(), '_bulk'];
$response = ActiveRecord::getDb()->post($url, [], $bulk);
$n = 0;
$errors = [];
foreach ($response['items'] as $item) {
if (isset($item['index']['status']) && ($item['index']['status'] == 201 || $item['index']['status'] == 200)) {
$n++;
} else {
$errors[] = $item['index'];
}
}
if (!empty($errors) || isset($response['errors']) && $response['errors']) {
throw new Exception(__METHOD__ . ' failed inserting ' . $modelClass . ' model records.', $errors);
}
return $n;
}