Выполняя поиск с помощью Apachesolr, я хочу добавить пару фильтров в hook_apachesolr_prepare_query (& $ query). Это работает хорошо, за исключением того, что я хочу, чтобы фильтры расширяли поиск ('ИЛИ'), а не сужали его ('И').
Например, если у меня есть 4 узла типа: A и 3 типа: B, которые соответствуют запросу, для фильтрации по типу: A и типу: B должно возвращаться 7 узлов (типа: A И узлы типа: B), а не 0 типа: A, которые также относятся к типу: B.
Я видел предложение сделать это, используя модель nodeaccess
foreach ($filters as $filter) {
$subquery = apachesolr_drupal_query();
if (!empty($subquery)) {
$subquery->add_filter('type', $filter);
$query->add_subquery($subquery);
}
}
но это не похоже на работу. (Не дает никаких результатов).
Затем я попытался (поскольку у меня ограниченное количество типов узлов), исключая типы, которые мне не нужны:
$excludes = array('A', 'B', 'C');
$excludes = array_diff($excludes, $filters);
$exclude = implode('&', $excludes);
$query->add_filter('type', $exclude, TRUE);
Этот метод склеивания их не работает (экранирование '&'), но не добавляет их в качестве подзапросов, аналогично описанному выше.
Есть предложения, как это сделать?