Как использовать несколько фильтров для расширения поиска в запросах Apachesolr

Выполняя поиск с помощью Apachesolr, я хочу добавить пару фильтров в hook_apachesolr_prepare_query (& $ query). Это работает хорошо, за исключением того, что я хочу, чтобы фильтры расширяли поиск ('ИЛИ'), а не сужали его ('И').

Например, если у меня есть 4 узла типа: A и 3 типа: B, которые соответствуют поиску, для фильтрации по типу: A и типу: B должно вернуть 7 узлов (типа: Узлы AND типа: 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);

Этот метод склеивания их не работает ('&' экранируется), но ни один из них не добавляет их в качестве подзапросов, как описано выше.

Есть предложения о том, как это сделать?

6
задан kiamlaluno 25 August 2010 в 20:28
поделиться