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;
         }
     }
 }
Beispiel #3
0
 public function testGetClassMetadataFactory()
 {
     $mdf = $this->sm->getClassMetadataFactory();
     $this->assertInstanceOf('Doctrine\\Search\\Mapping\\ClassMetadataFactory', $mdf);
 }