public function createIndex() { // Remove old unfinished indices foreach ($this->_client->getStatus()->getIndicesWithAlias($this->getIndex()->getName() . '.tmp') as $index) { /** @var Elastica\Index $index */ $index->delete(); } // Set current index to read-only foreach ($this->_client->getStatus()->getIndicesWithAlias($this->getIndex()->getName()) as $index) { $index->getSettings()->setBlocksWrite(true); } // Create new index and switch alias $version = time(); /** @var $indexNew CM_Elasticsearch_Type_Abstract */ $indexNew = new static($this->_client, $version); $indexNew->_createIndex(true); $indexNew->getIndex()->addAlias($this->getIndex()->getName() . '.tmp'); $settings = $indexNew->getIndex()->getSettings(); $refreshInterval = $settings->getRefreshInterval(); //$mergeFactor = $settings->getMergePolicy('merge_factor'); //$settings->setMergePolicy('merge_factor', 50); $settings->setRefreshInterval('-1'); $indexNew->update(null, true); //$settings->setMergePolicy('merge_factor', $mergeFactor); $settings->setRefreshInterval($refreshInterval); $indexNew->getIndex()->addAlias($this->getIndex()->getName()); $indexNew->getIndex()->removeAlias($this->getIndex()->getName() . '.tmp'); // Remove old index foreach ($this->_client->getStatus()->getIndicesWithAlias($this->getIndex()->getName()) as $index) { /** @var Elastica\Index $index */ if ($index->getName() != $indexNew->getIndex()->getName()) { $index->delete(); } } }