【问题标题】:Drupal 8: Altering Search API queriesDrupal 8:改变搜索 API 查询
【发布时间】:2017-01-25 15:20:40
【问题描述】:

我正在开发一个包含以下已激活模块的项目:

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 参数周围使用双引号或单引号时都会发生这种情况。

我什至不确定这是否是阻止我更改查询的原因,但这是我在此过程中发现的唯一接近错误的原因。也有可能我根本不应该以书面方式定位表格,但我没有找到任何文档指导我采用正确的方法。

我将不胜感激任何对此问题的见解!谢谢!

【问题讨论】:

    标签: drupal-8


    【解决方案1】:

    一般可以用

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

    在查询上获取可以在 search_api 查询中使用的字段数组。

    【讨论】:

      【解决方案2】:

      捎带 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', '<>');
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-09-12
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 2018-09-30
        • 2012-07-21
        • 2014-07-09
        • 2018-09-09
        • 1970-01-01
        相关资源
        最近更新 更多