public function ElasticsearchViewsQuery::execute in Elasticsearch Connector 8.2
Same name and namespace in other branches
- 8.7 modules/elasticsearch_connector_views/src/Plugin/views/query/ElasticsearchViewsQuery.php \Drupal\elasticsearch_connector_views\Plugin\views\query\ElasticsearchViewsQuery::execute()
- 8.5 modules/elasticsearch_connector_views/src/Plugin/views/query/ElasticsearchViewsQuery.php \Drupal\elasticsearch_connector_views\Plugin\views\query\ElasticsearchViewsQuery::execute()
- 8.6 modules/elasticsearch_connector_views/src/Plugin/views/query/ElasticsearchViewsQuery.php \Drupal\elasticsearch_connector_views\Plugin\views\query\ElasticsearchViewsQuery::execute()
Executes the query and fills the associated view object with according values.
Values to set: $view->result, $view->total_rows, $view->execute_time, $view->pager['current_page'].
$view->result should contain an array of objects. The array must use a numeric index starting at 0.
Parameters
view $view: The view which is executed.
Overrides QueryPluginBase::execute
File
- modules/
elasticsearch_connector_views/ src/ Plugin/ views/ query/ ElasticsearchViewsQuery.php, line 414
Class
- ElasticsearchViewsQuery
- Defines a Views query class for searching on Search API indexes.
Namespace
Drupal\elasticsearch_connector_views\Plugin\views\queryCode
public function execute(ViewExecutable $view) {
$view->result = array();
$view->total_rows = 0;
$view->execute_time = 0;
$index = $this
->getIndex();
$type = $this
->getSearchTypes();
try {
$start = microtime(TRUE);
$client = $this->elasticsearchClient;
if ($client) {
$view->execute_time = microtime(TRUE) - $start;
// Execute the search.
}
// Execute search.
$response = $client
->search(array(
'index' => $index,
'type' => $type,
'body' => $this->query_params,
));
// Store results.
if (!empty($response['hits']['hits'])) {
$item_index = 0;
foreach ($response['hits']['hits'] as $doc) {
$result_doc = array();
foreach ($doc['fields'] as $field_name => $field_value) {
// TODO: Handle this by implementing the Multivalue interface in D8
// Handle multivalue with concatenation for now.
$result_doc[$field_name] = implode(' | ', $field_value);
}
$result_doc['_source'] = $doc['_source'];
$result_doc['index'] = $item_index;
$view->result[] = new ResultRow($result_doc);
// Increment the index item.
$item_index++;
}
}
// $view->result = iterator_to_array($view->result);
// Store the results.
$view->pager->total_items = $view->total_rows = $response['hits']['total'];
$view->pager
->updatePageInfo();
// We shouldn't use $results['performance']['complete'] here, since
// extracting the results probably takes considerable time as well.
$view->execute_time = $response['took'];
} catch (\Exception $e) {
$this->errors[] = $e
->getMessage();
}
if ($this->errors) {
foreach ($this->errors as $msg) {
drupal_set_message($msg, 'error');
}
$view->result = array();
$view->total_rows = 0;
$view->execute_time = 0;
}
}