protected function SearchApiMultiQuery::addFilters in Search API Multi-Index Searches 7
Helper method for adding a filter to index-specific queries.
Parameters
SearchApiQueryFilterInterface[]|array[] $filters: An array of filters to add, as returned by SearchApiQueryFilterInterface::getFilters().
SearchApiQuery[] $parents: The query or filter objects to which the filters should be applied, keyed by index ID.
SearchApiQuery[] $queries: The queries used, keyed by index ID.
1 call to SearchApiMultiQuery::addFilters()
- SearchApiMultiQuery::searchMultiple in ./
search_api_multi.query.inc - Searches multiple indexes with this query.
File
- ./
search_api_multi.query.inc, line 872
Class
- SearchApiMultiQuery
- Standard implementation of SearchApiMultiQueryInterface.
Code
protected function addFilters(array $filters, array $parents, array $queries) {
foreach ($filters as $filter) {
if (is_array($filter)) {
if ($filter[0] == 'search_api_multi_index') {
continue;
}
list($index_id, $field) = explode(':', $filter[0], 2);
if (!empty($parents[$index_id])) {
$parents[$index_id]
->condition($field, $filter[1], $filter[2]);
}
}
else {
/** @var SearchApiQueryFilterInterface[] $nested */
$nested = array();
foreach ($parents as $index_id => $query) {
$nested[$index_id] = $queries[$index_id]
->createFilter($filter
->getConjunction());
}
$this
->addFilters($filter
->getFilters(), $nested, $queries);
foreach ($nested as $index_id => $nested_filter) {
if ($nested_filter
->getFilters()) {
$parents[$index_id]
->filter($nested_filter);
}
}
}
}
}