protected function SearchApiMultiQuery::checkFilterIndexes in Search API Multi-Index Searches 7
Checks a filter object for filters on the used indexes.
Parameters
SearchApiQueryFilterInterface $filter: The filter whose indexes should be added.
Return value
array An array mapping the machine names of all indexes used in the filter to TRUE.
1 call to SearchApiMultiQuery::checkFilterIndexes()
- SearchApiMultiQuery::filter in ./
search_api_multi.query.inc - Adds a subfilter to this query's filter.
File
- ./
search_api_multi.query.inc, line 587
Class
- SearchApiMultiQuery
- Standard implementation of SearchApiMultiQueryInterface.
Code
protected function checkFilterIndexes(SearchApiQueryFilterInterface $filter) {
$indexes = array();
// Remember all the indexes of fields used in any filters, so we can later
// restrict the search to only those. Also, restrict the search correctly if
// the "search_api_multi_index" field is used.
foreach ($filter
->getFilters() as $f) {
if (is_array($f)) {
if ($f[0] == 'search_api_multi_index') {
if ($f[2] == '=') {
$indexes[$f[1]] = TRUE;
}
else {
foreach ($this->indexes as $id => $index) {
if ($id != $f[1]) {
$indexes[$id] = TRUE;
}
}
}
}
elseif ($f[2] != '<>' && strpos($f[0], ':')) {
list($index_id) = explode(':', $f[0], 2);
$indexes[$index_id] = TRUE;
}
}
else {
$indexes += $this
->checkFilterIndexes($f);
}
}
return $indexes;
}