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\backendCode
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;
}