You are here

protected function SearchApiSolrBackend::createFilterQueries in Search API Solr 8

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::createFilterQueries()
  2. 8.2 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::createFilterQueries()
  3. 4.x src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::createFilterQueries()

Recursively transforms conditions into a flat array of Solr filter queries.

Parameters

\Drupal\search_api\Query\ConditionGroupInterface $condition_group: The group of conditions.

array $solr_fields: The mapping from Drupal to Solr field names.

\Drupal\search_api\Item\FieldInterface[] $index_fields: The fields handled by the curent index.

array $options: The query options.

Return value

array Array of filter query strings.

Throws

\Drupal\search_api\SearchApiException

1 call to SearchApiSolrBackend::createFilterQueries()
SearchApiSolrBackend::getFilterQueries in src/Plugin/search_api/backend/SearchApiSolrBackend.php
Serializes a query's conditions as Solr filter queries.

File

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

Class

SearchApiSolrBackend
Apache Solr backend for search api.

Namespace

Drupal\search_api_solr\Plugin\search_api\backend

Code

protected function createFilterQueries(ConditionGroupInterface $condition_group, array $solr_fields, array $index_fields, array &$options) {
  $fq = [];
  $conditions = $condition_group
    ->getConditions();
  foreach ($conditions as $condition) {
    if ($condition instanceof ConditionInterface) {

      // Nested condition.
      $field = $condition
        ->getField();
      if (!isset($index_fields[$field])) {
        throw new SearchApiException($this
          ->t('Filter term on unknown or unindexed field @field.', array(
          '@field' => $field,
        )));
      }
      $value = $condition
        ->getValue();
      $filter_query = $this
        ->createFilterQuery($solr_fields[$field], $value, $condition
        ->getOperator(), $index_fields[$field], $options);
      if ($filter_query) {
        $fq[] = [
          'query' => $this
            ->createFilterQuery($solr_fields[$field], $value, $condition
            ->getOperator(), $index_fields[$field], $options),
          'tags' => $condition_group
            ->getTags(),
        ];
      }
    }
    else {

      // Nested condition group.
      $nested_fqs = $this
        ->createFilterQueries($condition, $solr_fields, $index_fields, $options);
      $fq = array_merge($fq, $this
        ->reduceFilterQueries($nested_fqs, $condition));
    }
  }
  return $fq;
}