eZ\Publish\Core\Search\Elasticsearch\Content\Indexer::createSearchIndex PHP Method

createSearchIndex() public method

Create search engine index.
public createSearchIndex ( Symfony\Component\Console\Output\OutputInterface $output, integer $iterationCount, boolean $commit )
$output Symfony\Component\Console\Output\OutputInterface
$iterationCount integer
$commit boolean commit changes after each iteration
    public function createSearchIndex(OutputInterface $output, $iterationCount, $commit)
    {
        $output->writeln('Creating Elasticsearch Search Engine Index...');
        if (!$this->searchHandler instanceof SearchHandler) {
            throw new RuntimeException(sprintf('Expected to find an instance of %s, but found %s', SearchHandler::class, get_class($this->searchHandler)));
        }
        $stmt = $this->getContentDbFieldsStmt(['count(id)']);
        $totalCount = intval($stmt->fetchColumn());
        $stmt = $this->getContentDbFieldsStmt(['id', 'current_version']);
        $this->searchHandler->purgeIndex();
        /** @var \Symfony\Component\Console\Helper\ProgressBar $progress */
        $progress = new ProgressBar($output);
        $progress->start($totalCount);
        $i = 0;
        do {
            $contentObjects = [];
            for ($k = 0; $k <= $iterationCount; ++$k) {
                if (!($row = $stmt->fetch(PDO::FETCH_ASSOC))) {
                    break;
                }
                try {
                    $contentObjects[] = $this->persistenceHandler->contentHandler()->load($row['id'], $row['current_version']);
                } catch (NotFoundException $e) {
                    $this->logWarning($progress, "Could not load current version of Content with id {$row['id']}, so skipped for indexing. Full exception: " . $e->getMessage());
                }
            }
            foreach ($contentObjects as $contentObject) {
                try {
                    $this->searchHandler->indexContent($contentObject);
                    // Skip location indexing if search engine does not use it, or if content does not have locations
                    if (empty($contentObject->versionInfo->contentInfo->mainLocationId)) {
                        continue;
                    }
                    $this->indexLocations($contentObject->versionInfo->contentInfo->id, $progress);
                } catch (NotFoundException $e) {
                    $this->logWarning($progress, 'Content with id ' . $contentObject->versionInfo->id . ' has missing data, so skipped for indexing. Full exception: ' . $e->getMessage());
                }
            }
            if ($commit) {
                $this->searchHandler->flush();
            }
            $progress->advance($k);
        } while (($i += $iterationCount) < $totalCount);
        $progress->finish();
        $output->writeln('');
        $output->writeln('Finished creating Elasticsearch Search Engine Index');
    }