public function testActionHandling() { $this->specify('testing item handling', function () { verify($this->query->isReady())->false(); for ($i = 0; $i < self::BULK_SIZE; $i++) { $this->query->addAction(new \Nord\Lumen\Elasticsearch\Documents\Bulk\BulkAction()); } verify($this->query->hasItems())->true(); verify($this->query->isReady())->true(); $this->query->reset(); verify($this->query->hasItems())->false(); }); }
/** * @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; }