Bildiğimiz gibi $ app/console fos:elastica:populate komutu ile bir elasticsearch indexi doldurabiliriz, ama eğer bu işlemi programlı olarak yapmak isterseniz aşağıdaki örneği kullanabilirsiniz. Örneğimiz FOSElasticaBundle kullanıyor.


Class


use FOS\ElasticaBundle\Index\IndexManager;
use FOS\ElasticaBundle\Index\Resetter;
use FOS\ElasticaBundle\Provider\ProviderInterface;
use FOS\ElasticaBundle\Provider\ProviderRegistry;
use FOS\ElasticaBundle\Elastica\Index;

class ElasticsearchPupulate
{
...

public function populateElasticSearch()
{
/** @var IndexManager $indexManager */
$indexManager = $this->get('fos_elastica.index_manager');
/** @var ProviderRegistry $providerRegistry */
$providerRegistry = $this->get('fos_elastica.provider_registry');
/** @var Resetter $resetter */
$resetter = $this->get('fos_elastica.resetter');

foreach ($indexManager->getAllIndexes() as $indexName => $index) {
/** @var Index $index */
if ($index->exists()) {
$resetter->resetIndex($indexName);
} else {
$index->create();
}

/** @var $providers ProviderInterface[] */
$providers = $providerRegistry->getIndexProviders($indexName);
foreach ($providers as $provider) {
$provider->populate();
}

$indexManager->getIndex($indexName)->refresh();
}
}
}