protected function SearchApiSolrBackend::setGrouping in Search API Solr 8
Same name and namespace in other branches
- 8.3 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::setGrouping()
 - 8.2 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::setGrouping()
 - 4.x src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::setGrouping()
 
Sets grouping for the query.
Parameters
\Solarium\QueryType\Select\Query\Query $solarium_query:
\Drupal\search_api\Query\QueryInterface $query:
array $grouping_options:
array $index_fields:
array $field_names:
Throws
\Drupal\search_api_solr\SearchApiSolrException
1 call to SearchApiSolrBackend::setGrouping()
- SearchApiSolrBackend::search in src/
Plugin/ search_api/ backend/ SearchApiSolrBackend.php  - Options on $query prefixed by 'solr_param_' will be passed natively to Solr as query parameter without the prefix. For example you can set the "Minimum Should Match" parameter 'mm' to '75%' like this:
 
File
- src/
Plugin/ search_api/ backend/ SearchApiSolrBackend.php, line 2763  
Class
- SearchApiSolrBackend
 - Apache Solr backend for search api.
 
Namespace
Drupal\search_api_solr\Plugin\search_api\backendCode
protected function setGrouping(Query $solarium_query, QueryInterface $query, $grouping_options = [], $index_fields = [], $field_names = []) {
  if (!empty($grouping_options['use_grouping'])) {
    $group_fields = [];
    foreach ($grouping_options['fields'] as $collapse_field) {
      $first_name = $field_names[$collapse_field];
      /** @var \Drupal\search_api\Item\Field $field */
      $field = $index_fields[$collapse_field];
      $type = $field
        ->getType();
      if ($this->dataTypeHelper
        ->isTextType($type)) {
        $this
          ->getLogger()
          ->error('Grouping is not supported for field @field. Only single-valued fields not indexed as "Fulltext" are supported.', [
          '@field' => $index_fields[$collapse_field]['name'],
        ]);
      }
      else {
        $group_fields[] = $first_name;
      }
    }
    if (!empty($group_fields)) {
      // Activate grouping on the solarium query.
      $grouping_component = $solarium_query
        ->getGrouping();
      $grouping_component
        ->setFields($group_fields)
        ->setNumberOfGroups(TRUE)
        ->setTruncate(!empty($grouping_options['truncate']))
        ->setFacet(!empty($grouping_options['group_facet']));
      if (!empty($grouping_options['group_limit']) && $grouping_options['group_limit'] != 1) {
        $grouping_component
          ->setLimit($grouping_options['group_limit']);
      }
      if (!empty($grouping_options['group_sort'])) {
        $sorts = [];
        foreach ($grouping_options['group_sort'] as $group_sort_field => $order) {
          if (isset($fields[$group_sort_field])) {
            $f = $fields[$group_sort_field];
            if (substr($f, 0, 3) === 'ss_') {
              $f = 'sort_' . substr($f, 3);
            }
            $sorts[] = $f . ' ' . strtolower($order);
          }
        }
        $grouping_component
          ->setSort(implode(', ', $sorts));
      }
    }
  }
}