/** * @inheritdoc */ public function handle() { $this->info('Indexing data ...'); $service = $this->getElasticsearchService(); $data = $this->getData(); $bar = $this->output->createProgressBar(count($data)); $bulkQuery = new BulkQuery($this->getBulkSize()); foreach ($data as $item) { $action = new BulkAction(); $meta = ['_index' => $this->getIndex(), '_type' => $this->getType(), '_id' => $this->getItemId($item)]; if (($parent = $this->getItemParent($item)) !== null) { $meta['_parent'] = $parent; } $action->setAction(BulkAction::ACTION_INDEX, $meta)->setBody($this->getItemBody($item)); $bulkQuery->addAction($action); if ($bulkQuery->isReady()) { $service->bulk($bulkQuery->toArray()); $bulkQuery->reset(); } $bar->advance(); } if ($bulkQuery->hasItems()) { $service->bulk($bulkQuery->toArray()); } $bar->finish(); $this->info("\nDone!"); return 0; }
public function testSerialization() { $this->specify('checking serialization', function () { $actionName = \Nord\Lumen\Elasticsearch\Documents\Bulk\BulkAction::ACTION_INDEX; $metadata = ['_index' => 'foo', '_type' => 'bar', '_id' => 'baz']; $body = ['foo' => 'bar']; // Add two actions (same item twice) $action = new \Nord\Lumen\Elasticsearch\Documents\Bulk\BulkAction(); $action->setAction($actionName, $metadata)->setBody($body); $this->query->addAction($action)->addAction($action); verify($this->query->toArray())->equals(['body' => [[$actionName => $metadata], $body, [$actionName => $metadata], $body]]); }); $this->specify('checking serialization with _parent', function () { $actionName = \Nord\Lumen\Elasticsearch\Documents\Bulk\BulkAction::ACTION_INDEX; $metadata = ['_index' => 'foo', '_type' => 'bar', '_id' => 'baz', '_parent' => 'qux']; $body = ['foo' => 'bar']; // Add two actions (same item twice) $action = new \Nord\Lumen\Elasticsearch\Documents\Bulk\BulkAction(); $action->setAction($actionName, $metadata)->setBody($body); $this->query->addAction($action)->addAction($action); verify($this->query->toArray())->equals(['body' => [[$actionName => $metadata], $body, [$actionName => $metadata], $body]]); }); }