2017-01-25 5 views
0

Я работаю над проектом, который включает в себя следующие модули: активированныеDrupal 8: изменяющего Search API запросов

Drupal ядро ​​8.2.3 Database Search 8.x-1,0-Beta4 Search API 8.x- 1,0-beta4 Search API Термин Обработчики 8.x-1,0-beta4 Просмотров 8.2.3

у меня есть список НДИ, которые должны быть исключены из результатов поиска на веб-узле поиска. Поиск использует Search API и был настроен с помощью Views.

таблица в базе данных: «search_api_db_default_index» поле я хочу предназначаться это: «нидь»

я не смог HOOK__search_api_query_alter или HOOK_search_api_results_alter стрелять, так что я пытаюсь манипулировать запрос через HOOK_views_query_alter.

я попытался использовать как "addWhere" и "addCondition" методы с помощью следующего синтаксиса:

При использовании метода addCondition, я попытался

$query->addCondition('search_api_db_default_index.nid', $oneBadNid, '<>'); 

и

$query->addCondition('search_api_db_default_index.nid', $manyBadNids, 'NOT IN'); 

и при использовании метода addWhere я попытался

$query->addWhere('AND', 'search_api_index_default_index.nid', $oneBadNid, '<>'); 

и

$query->addWhere('AND', 'search_api_index_default_index.nid', $manyBadNids, 'NOT IN'); 

Независимо от того, или нет префикса I поля с именем таблицы, поиск всегда приводит к срабатыванию следующего уведомления:

Неизвестного поля в пункте фильтра: ' search_api_db_default_index.nid '.

Похоже, что имя поля всегда завернуто в строку с кодировкой html, представляющую одинарную кавычку, но это происходит как при использовании двойных котировок, так и в одинарных котировках по прилагаемому параметру table.field.

Я даже не уверен, что это не позволяет мне изменить мой запрос, но это единственное, что близко к ошибке, которую я обнаружил в этом процессе. Возможно также, что я просто не должен был таргетировать таблицу так, как написано, но я не нашел никакой документации, направляющей меня на правильную методологию.

Буду признателен за понимание этой проблемы! Благодаря!

ответ

0

Как правило, вы можете использовать

$fields = $query->getIndex()->getFields(); 

на запрос, чтобы получить массив полей, которые можно использовать в запросе search_api.

0

Piggy-backing от комментария Nebel54 и, пытаясь сделать это самостоятельно, вам не нужно включать имя таблицы при настройке addCondition. Однако мне нужно было использовать hook_search_api_query_alter для определенного вида.

function mymodule_search_api_query_alter(\Drupal\search_api\Query\QueryInterface &$query) { 
    // Ensure field_myfield is being indexed 
    $fields = $query->getIndex()->getFields(); 
    if (isset($fields['field_myfield'])) { 
    $query->addCondition('field_myfield', 'myvalue', '<>'); 
    } 
} 
Смежные вопросы