Drupal 8 Drupal8:改变搜索API查询

Drupal 8 Drupal8:改变搜索API查询,drupal-8,Drupal 8,我正在从事一个项目,该项目包括以下激活模块: Drupal core 8.2.3 数据库搜索8.x-1.0-beta4 搜索API 8.x-1.0-beta4 搜索API术语处理程序8.x-1.0-beta4 视图8.2.3 我有一个NID列表,需要从站点范围搜索的搜索结果中排除。搜索使用搜索API,并已使用视图进行设置 数据库中的表是:“搜索\ api \数据库\默认\索引” 我希望针对的领域是:“nid” 我无法获得HOOK\u搜索\u api\u查询\u alter或HOOK\u搜索\u

我正在从事一个项目,该项目包括以下激活模块:

Drupal core 8.2.3 数据库搜索8.x-1.0-beta4 搜索API 8.x-1.0-beta4 搜索API术语处理程序8.x-1.0-beta4 视图8.2.3

我有一个NID列表,需要从站点范围搜索的搜索结果中排除。搜索使用搜索API,并已使用视图进行设置

数据库中的表是:“搜索\ api \数据库\默认\索引” 我希望针对的领域是:“nid”

我无法获得HOOK\u搜索\u api\u查询\u alter或HOOK\u搜索\u api\u结果\u alter以激发,因此我尝试通过HOOK\u视图\u查询\u alter操纵查询

我尝试使用以下语法的“addWhere”和“addCondition”方法:

在使用addCondition方法时,我尝试

$query->addCondition('search_api_db_default_index.nid', $oneBadNid, '<>');
$query->addWhere('AND', 'search_api_index_default_index.nid', $oneBadNid, '<>');
当使用addWhere方法时,我尝试

$query->addCondition('search_api_db_default_index.nid', $oneBadNid, '<>');
$query->addWhere('AND', 'search_api_index_default_index.nid', $oneBadNid, '<>');
无论是否在字段前面加上表名,搜索始终会触发以下通知:

筛选器子句中的未知字段:“search\u api\u db\u default\u index.nid”

字段名似乎总是用表示单个引号的html编码字符串包装,但在提供的table.field参数周围使用双引号或单引号时都会出现这种情况

我甚至不确定这是否是阻止我修改查询的原因,但这是我在这个过程中发现的唯一一个接近错误的地方。也有可能我根本不应该以编写的方式针对表,但我没有找到任何文档指导我使用正确的方法

如果您能深入了解这个问题,我将不胜感激!谢谢

通常您可以使用

$fields = $query->getIndex()->getFields();
在查询中获取可以在搜索api查询中使用的字段数组。

通常可以使用

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

在查询中获取可在搜索api查询中使用的字段数组。

Piggy放弃Nebel54的注释,并尝试自己进行此操作,设置addCondition时不需要包含“表”名称。然而,我确实需要在特定于视图的视图上使用hook\u search\u api\u query\u 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', '<>');
  }
}
函数mymodule\u search\u api\u query\u alter(\Drupal\search\u api\query\query\QueryInterface&$query){
//确保字段\u myfield正在编制索引
$fields=$query->getIndex()->getFields();
如果(isset($fields['field\u myfield'])){
$query->addCondition('field\u myfield','myvalue','');
}
}

Piggy放弃了Nebel54的评论,并尝试自己这样做,设置addCondition时不需要包含“表”名称。然而,我确实需要在特定于视图的视图上使用hook\u search\u api\u query\u 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', '<>');
  }
}
函数mymodule\u search\u api\u query\u alter(\Drupal\search\u api\query\query\QueryInterface&$query){
//确保字段\u myfield正在编制索引
$fields=$query->getIndex()->getFields();
如果(isset($fields['field\u myfield'])){
$query->addCondition('field\u myfield','myvalue','');
}
}