You are here

function elasticsearch_connector_views_views_data in Elasticsearch Connector 7.2

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

Implementation of hook_views_data().

File

modules/elasticsearch_connector_views/elasticsearch_connector_views.views.inc, line 32
elasticsearch_connector_views.views.inc The auto-load file extension for views implementation.

Code

function elasticsearch_connector_views_views_data() {
  $data = array();
  foreach (elasticsearch_connector_clusters(FALSE) as $cluster) {
    $info = elasticsearch_connector_get_cluster_info($cluster);
    $elastic_client = $info['client'];
    if ($elastic_client && !empty($info['info']) && elasticsearch_connector_check_status($info['info'])) {
      $indices = $elastic_client
        ->indices()
        ->stats();
      if (!empty($indices['indices'])) {
        foreach ($indices['indices'] as $index_name => $index_info) {

          // In elasticsearch the table is actually the document type.
          // So get all types and build data array.
          $mapping = $elastic_client
            ->indices()
            ->getMapping(array(
            'index' => $index_name,
          ));
          if (!empty($mapping[$index_name]['mappings'])) {
            foreach ($mapping[$index_name]['mappings'] as $type_name => $type_settings) {
              $name = format_string('@cluster (@index_name:@type)', array(
                '@cluster' => $cluster->name,
                '@index_name' => $index_name,
                '@type' => $type_name,
              ));
              $base_table = 'elsv__' . $cluster->cluster_id . '__' . $index_name . '__' . $type_name;
              $data[$base_table]['table']['group'] = t('ES');
              $data[$base_table]['table']['base'] = array(
                'query class' => 'elasticsearch_connector_views_query',
                'title' => t('Cluster !name', array(
                  '!name' => $name,
                )),
                'help' => t('Searches the site with the Elasticsearch search engine for !name', array(
                  '!name' => $name,
                )),
              );

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

              // Keyword field.
              $data[$base_table]['keyword'] = array(
                'title' => t('Search'),
                'help' => t('Fulltext search'),
                'filter' => array(
                  'handler' => 'elasticsearch_connector_views_keyword_handler_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(
                  'handler' => 'elasticsearch_connector_views_handler_field',
                  'click sortable' => TRUE,
                ),
              );
            }
          }
        }
      }
    }
  }
  return $data;
}