function drush_elasticsearch_connector_search_api_reset_elasticsearch in Elasticsearch Connector 7.5
Same name and namespace in other branches
- 7 modules/elasticsearch_connector_search_api/elasticsearch_connector_search_api.drush.inc \drush_elasticsearch_connector_search_api_reset_elasticsearch()
- 7.2 modules/elasticsearch_connector_search_api/elasticsearch_connector_search_api.drush.inc \drush_elasticsearch_connector_search_api_reset_elasticsearch()
Callback for the reset-elasticsearch drush command.
File
- modules/
elasticsearch_connector_search_api/ elasticsearch_connector_search_api.drush.inc, line 30 - Drush integration for the elasticsearch_connector_search_api module.
Code
function drush_elasticsearch_connector_search_api_reset_elasticsearch($search_api_index_name, $number_of_shards, $number_of_replicas = 0) {
// Load the Search API index.
$index = search_api_index_load($search_api_index_name);
if (!$index || $index
->server()->class != 'search_api_elasticsearch_connector') {
return drush_set_error('elasticsearch_connector_search_api', t("Search API index '@index_name' not found.", array(
'@index_name' => $search_api_index_name,
)));
}
if ($number_of_shards != (int) $number_of_shards || $number_of_shards < 1) {
return drush_set_error('elasticsearch_connector_search_api', t("Invalid number of shards. The param should be an integer greater than or equal to 1."));
}
if ($number_of_replicas != (int) $number_of_replicas || $number_of_replicas < 0) {
return drush_set_error('elasticsearch_connector_search_api', t("Invalid number of replicas. The param should be an integer greater than or equal to 0."));
}
$es_index = $index->options['index_name']['index'];
// Find the affected Search API indexes.
$all_indexes = search_api_index_load_multiple(FALSE, array(
'enabled' => TRUE,
));
// Always list the specified index first.
$affected_indexes = array(
$index,
);
foreach ($all_indexes as $index) {
if ($index->machine_name == $search_api_index_name) {
continue;
}
$server = $index
->server();
if ($server->class == 'search_api_elasticsearch_connector' && $index->options['index_name']['index'] == $es_index) {
$affected_indexes[] = $index;
}
}
// List Search API indexes this opperation will affect.
drush_print('The following Search API indexes will be affected:');
foreach ($affected_indexes as $index) {
drush_print(dt(' * @name (@machine_name)', array(
'@name' => $index->name,
'@machine_name' => $index->machine_name,
)));
}
// Give the user a chance to bail.
if (!drush_confirm(dt("Do you really want to destroy and re-create the Elasticsearch index '!es_index'?", array(
'!es_index' => $es_index,
)))) {
return drush_user_abort();
}
// Remove the existing indexes.
foreach ($affected_indexes as $index) {
try {
$index
->server()
->removeIndex($index);
} catch (Exception $e) {
}
}
// Re-create and re-index the indexes.
foreach ($affected_indexes as $index) {
try {
$index->force_create['number_of_shards'] = $number_of_shards;
$index->force_create['number_of_replicas'] = $number_of_replicas;
$index
->server()
->addIndex($index);
$index
->reindex();
drush_log(dt('Re-initialized Search API index @name (@machine_name)', array(
'@name' => $index->name,
'@machine_name' => $index->machine_name,
)), 'ok');
} catch (Exception $e) {
// This exception, on the other hand, is important.
return drush_set_error($e
->getMessage());
}
}
}