You are here

protected function AbstractSearchApiSolrMultilingualBackend::getFilterQueries in Search API Solr 8.2

Serializes a query's conditions as Solr filter queries.

Parameters

\Drupal\search_api\Query\QueryInterface $query: The query to get the conditions from.

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

Overrides SearchApiSolrBackend::getFilterQueries

File

src/Plugin/search_api/backend/AbstractSearchApiSolrMultilingualBackend.php, line 328

Class

AbstractSearchApiSolrMultilingualBackend
A abstract base class for all multilingual Solr Search API backends.

Namespace

Drupal\search_api_solr\Plugin\search_api\backend

Code

protected function getFilterQueries(QueryInterface $query, array $solr_fields, array $index_fields, array &$options) {
  $condition_group = $query
    ->getConditionGroup();
  $conditions = $condition_group
    ->getConditions();
  if (empty($conditions) || empty($query
    ->getLanguages())) {
    return parent::getFilterQueries($query, $solr_fields, $index_fields, $options);
  }
  $fq = [];
  foreach ($conditions as $condition) {
    $language_fqs = [];
    foreach ($query
      ->getLanguages() as $langcode) {
      $language_specific_condition_group = $query
        ->createConditionGroup();
      $language_specific_condition_group
        ->addCondition(SEARCH_API_LANGUAGE_FIELD_NAME, $langcode);
      $language_specific_conditions =& $language_specific_condition_group
        ->getConditions();
      $language_specific_conditions[] = $condition;
      $language_fqs = array_merge($language_fqs, $this
        ->reduceFilterQueries($this
        ->createFilterQueries($language_specific_condition_group, $this
        ->getLanguageSpecificSolrFieldNames($langcode, $solr_fields, reset($index_fields)
        ->getIndex()), $index_fields, $options, $query), $condition_group));
    }
    $language_aware_condition_group = $query
      ->createConditionGroup('OR');
    $fq = array_merge($fq, $this
      ->reduceFilterQueries($language_fqs, $language_aware_condition_group, TRUE));
  }
  return $fq;
}