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(); } } }
/** * Update Alias * * @param $name * @param $index */ public static function updateAlias($name, $index) { $instance = new static(); $client = $instance->getElasticSearchClient(); $old_index = $instance->getIndex($name); $instance->deleteAlias($name, $old_index); $instance->createAlias($name, $index); }
/** * Update Alias * * @param $name * @param $index */ public static function updateAlias($name, $index) { $instance = new static(); $client = $instance->getElasticSearchClient(); $old_index = $instance->getIndex($name); $params = ['body' => ['actions' => [['add' => ['index' => $index, 'alias' => $name]], ['remove' => ['index' => $old_index, 'alias' => $name]]]]]; $client->indices()->updateAliases($params); }