You are here

protected function SearchApiSolrBackend::reduceFilterQueries in Search API Solr 8.2

Same name and namespace in other branches
  1. 8.3 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::reduceFilterQueries()
  2. 8 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::reduceFilterQueries()
  3. 4.x src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::reduceFilterQueries()

Reduces an array of filter queries to an array containing one filter query.

The queries will be logically combined and their tags will be merged.

Parameters

array $filter_queries:

\Drupal\search_api\Query\ConditionGroupInterface $condition_group:

bool $last:

Return value

array

2 calls to SearchApiSolrBackend::reduceFilterQueries()
AbstractSearchApiSolrMultilingualBackend::getFilterQueries in src/Plugin/search_api/backend/AbstractSearchApiSolrMultilingualBackend.php
Serializes a query's conditions as Solr filter queries.
SearchApiSolrBackend::createFilterQueries in src/Plugin/search_api/backend/SearchApiSolrBackend.php
Recursively transforms conditions into a flat array of Solr filter queries.

File

src/Plugin/search_api/backend/SearchApiSolrBackend.php, line 2095

Class

SearchApiSolrBackend
Apache Solr backend for search api.

Namespace

Drupal\search_api_solr\Plugin\search_api\backend

Code

protected function reduceFilterQueries(array $filter_queries, ConditionGroupInterface $condition_group, $last = FALSE) {
  $fq = [];
  if (count($filter_queries) > 1) {
    $queries = [];
    $tags = [];
    $pre = $condition_group
      ->getConjunction() == 'OR' ? '' : '+';
    foreach ($filter_queries as $nested_fq) {
      if (strpos($nested_fq['query'], '-') !== 0) {
        $queries[] = $pre . $nested_fq['query'];
      }
      elseif (!$pre) {
        $queries[] = '(' . $nested_fq['query'] . ')';
      }
      else {
        $queries[] = $nested_fq['query'];
      }
      $tags += $nested_fq['tags'];
    }
    $fq[] = [
      'query' => (!$last ? '(' : '') . implode(' ', $queries) . (!$last ? ')' : ''),
      'tags' => array_unique($tags + $condition_group
        ->getTags()),
    ];
  }
  elseif (!empty($filter_queries)) {
    $fq[] = [
      'query' => $filter_queries[0]['query'],
      'tags' => array_unique($filter_queries[0]['tags'] + $condition_group
        ->getTags()),
    ];
  }
  return $fq;
}