Newscoop\Search\Indexer::update PHP Метод

update() публичный Метод

Update index
public update ( mixed $count = 50, array $filter = null ) : void
$count mixed Number of items to index
$filter array Filter for the batch results
Результат void
    public function update($count = 50, $filter = null)
    {
        $logger = $this->container->get('logger');
        $batches = $count <= self::BATCH_MAX ? 1 : ceil($count / self::BATCH_MAX);
        for ($i = 1; $i <= $batches; $i++) {
            $batchCount = $i == $batches && $count % self::BATCH_MAX > 0 ? $count % self::BATCH_MAX : self::BATCH_MAX;
            $items = $this->repository->getBatch($batchCount, $filter);
            // TODO: Built in check if $items are less then $batchcount, we could stop iterating
            foreach ($this->indexClients as $client) {
                if ($client->isEnabled($this->name)) {
                    $client->setService($this->service);
                    foreach ($items as $item) {
                        $client->setItem($item);
                        if ($client->isTypeIndexable($this->name, $this->service->getSubType($item))) {
                            if ($this->service->isIndexable($item)) {
                                try {
                                    $client->add($this->service->getDocument($item));
                                } catch (Exception $e) {
                                    $itemData = $this->service->getDocument($item);
                                    $logger->error('Could not (completely) add item (' . $itemData['id'] . ') to indexing client. (' . __CLASS__ . ' - ' . $e->getMessage() . ')');
                                }
                            } elseif ($this->service->isIndexed($item)) {
                                try {
                                    $client->delete($this->service->getDocumentId($item));
                                } catch (Exception $e) {
                                    $logger->error('Could not (completely) delete item to indexing client. (' . __CLASS__ . ' - ' . $e->getMessage() . ')');
                                }
                            }
                        }
                    }
                    $client->flush();
                }
            }
            $this->repository->setIndexedNow($items);
        }
    }