protected function SearchApiSolrBackend::reduceFilterQueries in Search API Solr 8.2
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::reduceFilterQueries()
- 8 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::reduceFilterQueries()
- 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\backendCode
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;
}