我正在开发一个包含以下激活模块的项目:
Drupal核心8.2.3 数据库搜索8.x-1.0-beta4 搜索API 8.x-1.0-beta4 搜索API术语处理程序8.x-1.0-beta4 意见8.2.3
我有一个需要从网站范围搜索的搜索结果中排除的nid列表。搜索使用Search API,并已使用Views进行设置。
数据库中的表格是:“search_api_db_default_index” 我希望定位的领域是:“nid”
我无法触发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');
无论我是否在字段前添加表名,搜索总会导致触发以下通知:
过滤条款中的未知字段:'search_api_db_default_index.nid'。
字段名称似乎始终包含在表示单引号的html编码字符串中,但是当在所提供的table.field参数周围使用双引号或单引号时,会发生这种情况。
我甚至不确定这是阻止我改变查询的原因,但它是唯一接近我在此过程中发现的错误的东西。也有可能我不应该以书面的方式瞄准桌子,但我没有找到任何文件指导我采用正确的方法。
我很感激对此问题的任何见解!谢谢!
答案 0 :(得分:0)
通常你可以使用
$fields = $query->getIndex()->getFields();
在查询上获取可在search_api查询中使用的字段数组。
答案 1 :(得分:0)
小猪退出了Nebel54的评论,并且我自己尝试这样做,你不需要包括表格&#39;设置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', '<>');
}
}