/** * Indexes an array of documents. * * Documents are given as an array of the array of documents. The array of documents * holds documents for all translations of the particular entity. * * Notes: * - Does not force a commit on solr, depends on solr config, use {@commit} if you need that. * - On large amounts of data make sure to iterate with several calls to this function with a limited * set of documents, amount you have memory for depends on server, size of documents, & PHP version. * * @param \eZ\Publish\SPI\Search\Document[][] $documents */ public function bulkIndexDocuments(array $documents) { $documentMap = array(); $mainTranslationsEndpoint = $this->endpointResolver->getMainLanguagesEndpoint(); $mainTranslationsDocuments = array(); foreach ($documents as $translationDocuments) { foreach ($translationDocuments as $document) { $documentMap[$document->languageCode][] = $document; if ($mainTranslationsEndpoint !== null && $document->isMainTranslation) { $mainTranslationsDocuments[] = $this->getMainTranslationDocument($document); } } } foreach ($documentMap as $languageCode => $translationDocuments) { $this->doBulkIndexDocuments($this->endpointRegistry->getEndpoint($this->endpointResolver->getIndexingTarget($languageCode)), $translationDocuments); } if (!empty($mainTranslationsDocuments)) { $this->doBulkIndexDocuments($this->endpointRegistry->getEndpoint($mainTranslationsEndpoint), $mainTranslationsDocuments); } }
public function __construct(EndpointResolver $endpointResolver) { $this->hasMainLanguagesEndpoint = $endpointResolver->getMainLanguagesEndpoint() !== null; }