protected function execute(InputInterface $input, OutputInterface $output) { $metadataFactory = $this->searchManager->getClassMetadataFactory(); $classes = $metadataFactory->getAllMetadata(); if ($input->getOption('drop-before')) { $this->schema->dropMappings($classes); } $aliases = $this->schema->createMappings($classes, TRUE); if ($input->getOption('init-data')) { $indexAliases = array(); foreach ($aliases as $alias => $original) { $indexAliases[] = $alias . '=' . $original; } $exitCode = $this->getApplication()->doRun(new ArrayInput(array('elastica:pipe-entities', 'index-aliases' => $indexAliases)), $output); if ($exitCode !== 0) { return 1; } } $output->writeln(''); $this->schema->createAliases($aliases); return 0; }
protected function execute(InputInterface $input, OutputInterface $output) { $metaFactory = $this->searchManager->getClassMetadataFactory(); /** @var \Doctrine\Search\Mapping\ClassMetadata[] $classes */ $allClassesForIndex = $metaFactory->getAllMetadata(); if ($onlyEntity = $input->getOption('entity')) { $classes = [$metaFactory->getMetadataFor($onlyEntity)]; } else { $classes = $metaFactory->getAllMetadata(); } /** @var ProgressBar $progress */ $progress = NULL; $this->entityPiper->onIndexStart[] = function ($ep, Nette\Utils\Paginator $paginator, EntityRiver $river, ORMMetadata $class) use($output, &$progress) { $output->writeln(sprintf('Indexing <info>%s</info> using <info>%s</info>', $class->getName(), get_class($river))); if ($paginator->getItemCount() <= 0) { $output->writeln(" 0/0 River didn't return any results"); return; } $progress = new ProgressBar($output, $paginator->getItemCount()); $progress->setFormat($progress::getFormatDefinition('debug')); $progress->start(); }; $this->entityPiper->onIndexStats[] = function ($ep, ORMMetadata $meta, $timeToIndex, $timeToRead) use($input, $output) { if (!$input->getOption('stats')) { return; } $format = function ($time) { if ($time < 10) { return number_format($time * 1000, 6, '.', '') . ' ms'; } else { return number_format($time, 2, '.', '') . ' s'; } }; $output->writeln(sprintf(" ... Loading data took %s, indexing took %s", $format($timeToRead), $format($timeToIndex))); }; $this->entityPiper->onItemsIndexed[] = function ($ep, $entities) use($output, &$progress) { $progress->advance(count($entities)); }; $this->entityPiper->onChildSkipped[] = function ($ep, ClassMetadata $meta, ClassMetadata $parent) use($output, &$progress) { $output->writeln(sprintf('<info>%s</info> is a subclass of <info>%s</info> (being piped into <info>%s</info> type), ignoring.', $meta->className, $parent->className, $parent->type->name)); $progress = NULL; }; $aliases = array(); $indexAliases = $input->getArgument('index-aliases'); foreach ($indexAliases as $tmp) { list($alias, $original) = explode('=', $tmp, 2); $aliases[$original] = $alias; } foreach ($allClassesForIndex as $class) { //subclass bug if (isset($aliases[$class->getIndexName()])) { $class->index->name = $aliases[$class->getIndexName()]; } } foreach ($classes as $class) { $output->writeln(''); if ($old = array_search($class->getIndexName(), $aliases, TRUE)) { $output->writeln(sprintf('Redirecting data from <info>%s</info> to <info>%s</info>', $old, $class->getIndexName())); } unset($e); try { $this->entityPiper->indexEntities($class); } catch (\Exception $e) { } if (isset($e)) { // fix the metadata if ($old = array_search($class->getIndexName(), $aliases, TRUE)) { $class->index->name = $old; } throw $e; } if ($progress !== NULL) { $progress->finish(); } $output->writeln(''); } foreach ($allClassesForIndex as $class) { //subclass bug // fix the metadata if ($old = array_search($class->getIndexName(), $aliases, TRUE)) { $class->index->name = $old; } } }
public function testGetClassMetadataFactory() { $mdf = $this->sm->getClassMetadataFactory(); $this->assertInstanceOf('Doctrine\\Search\\Mapping\\ClassMetadataFactory', $mdf); }