You are here

function elasticsearch_connector_views_views_data in Elasticsearch Connector 8.7

Same name and namespace in other branches
  1. 8.2 modules/elasticsearch_connector_views/elasticsearch_connector_views.views.inc \elasticsearch_connector_views_views_data()
  2. 8.5 modules/elasticsearch_connector_views/elasticsearch_connector_views.views.inc \elasticsearch_connector_views_views_data()
  3. 8.6 modules/elasticsearch_connector_views/elasticsearch_connector_views.views.inc \elasticsearch_connector_views_views_data()
  4. 7.5 modules/elasticsearch_connector_views/elasticsearch_connector_views.views.inc \elasticsearch_connector_views_views_data()
  5. 7 modules/elasticsearch_connector_views/elasticsearch_connector_views.views.inc \elasticsearch_connector_views_views_data()
  6. 7.2 modules/elasticsearch_connector_views/elasticsearch_connector_views.views.inc \elasticsearch_connector_views_views_data()

Implements hook_views_data().

File

modules/elasticsearch_connector_views/elasticsearch_connector_views.views.inc, line 13
Views hook implementations for the Search API module.

Code

function elasticsearch_connector_views_views_data() {
  $data = array();
  $clientManager = \Drupal::service('elasticsearch_connector.client_manager');

  /** @var \Drupal\elasticsearch_connector\ClusterManager $cluster_manager */
  $cluster_manager = \Drupal::service('elasticsearch_connector.cluster_manager');
  foreach ($cluster_manager
    ->loadAllClusters(FALSE) as $cluster) {
    $elasticsearchClient = $clientManager
      ->getClientForCluster($cluster);
    if ($elasticsearchClient
      ->isClusterOk()) {
      $indices = $elasticsearchClient
        ->indices()
        ->stats();

      // TODO: Handle aliases also, not only indices.
      if (!empty($indices['indices'])) {
        foreach ($indices['indices'] as $index_name => $index_info) {
          $name = new FormattableMarkup('@cluster (@index_name)', array(
            '@cluster' => $cluster->name,
            '@index_name' => $index_name,
          ));
          $base_table = 'elsv__' . $cluster->cluster_id . '__' . $index_name;
          $data[$base_table]['table']['group'] = t('Elasticsearch');
          $data[$base_table]['table']['base'] = array(
            'index' => $index_name,
            'cluster_id' => $cluster->cluster_id,
            'title' => t('Cluster :name', array(
              ':name' => $name,
            )),
            'help' => t('Searches the site with the Elasticsearch search engine for !name', array(
              '!name' => $name,
            )),
            'query_id' => 'elasticsearch_connector_views_query',
          );
          $indexMapping = $elasticsearchClient
            ->indices()
            ->getMapping(array(
            'index' => $index_name,
          ));

          // Get the list of the fields in index directly from Elasticsearch.
          if (!empty($indexMapping[$index_name]['mappings']['properties'])) {
            _elasticsearch_connector_views_handle_fields($base_table, $data, $indexMapping[$index_name]['mappings']['properties']);
          }

          // Keyword field.
          $data[$base_table]['keyword'] = array(
            'title' => t('Search'),
            'help' => t('Fulltext search'),
            'filter' => array(
              'id' => 'elasticsearch_connector_views_fulltext_filter',
            ),
          );

          // Snippet field.
          $data[$base_table]['snippet'] = array(
            'title' => t('Snippet'),
            'help' => t('Search snippet'),
            'field' => array(
              'handler' => 'elasticsearch_connector_views_snippet_handler_field',
              'click sortable' => TRUE,
            ),
          );

          // Score field.
          $data[$base_table]['score'] = array(
            'title' => t('Score'),
            'help' => t('Score'),
            'field' => array(
              'id' => 'elasticsearch_connector_views_standard',
              'click sortable' => TRUE,
            ),
          );
        }
      }
    }
  }
  return $data;
}