You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 8中Search API Solr配置报错求助:数组转字符串与非法偏移类型

解决Drupal 8 Search API Solr的数组转字符串与非法偏移量错误

我之前在Drupal 8配置Search API Solr时也碰到过几乎一模一样的问题,结合你给出的错误信息,这两个报错其实是连锁反应——根源出在多语言环境下实体ID的处理逻辑上,从你提到的item ID格式{ [0]=> string(16) "entity:node/2:fr" }能看出来,这是多语言节点的ID,但系统把它当成数组传递了,导致后续函数接连报错。

错误原因拆解

  1. Array to string conversion:SearchApiSolrBackend->createId()函数需要接收字符串类型的item ID,但实际传入的是数组,触发了类型转换警告。
  2. Illegal offset type:ResultSet->addResultItem()内部用item ID作为数组键,而数组不能作为PHP数组的键,因此抛出非法偏移量错误。

分步解决方案

1. 调整索引的多语言配置(优先推荐)

这是最根本的解决方式,无需修改代码:

  • 进入你的Search API索引配置页面(路径:/admin/config/search/search-api/index/[你的索引名称]/edit)
  • 找到数据源区域,点击你配置的实体类型(比如“内容”)的「编辑」按钮
  • 在弹出的配置窗口中,找到语言处理选项,选择「每个语言版本作为单独的项索引」
  • 保存配置后,回到索引页面的「索引」标签,点击全部重新索引,确保所有内容的ID都以字符串形式存储

2. 临时代码补丁(紧急修复用)

如果配置调整后问题仍存在,或者你需要快速临时修复,可以修改search_api_solr模块的代码:
打开modules/search_api_solr/src/Plugin/search_api/backend/SearchApiSolrBackend.php,找到第1098行附近的createId()函数,在获取ID后增加数组判断:

public function createId(ItemInterface $item) {
  $id = $item->getId();
  // 新增:如果ID是数组,取第一个元素
  if (is_array($id)) {
    $id = reset($id);
  }
  return $this->siteHash . '#' . $id;
}

注意:这只是临时方案,后续模块更新会覆盖修改,建议优先用配置方式解决。

3. 检查相关模块与视图配置

  • 如果你安装了search_api_multilingual模块,确认它的配置是否正确——这个模块专门处理多语言索引,配置错误也可能导致ID格式异常。
  • 检查你的搜索视图配置,确保视图关联的是正确的Search API索引,并且没有自定义过滤器/排序逻辑错误地修改了实体ID。

完成以上步骤后,重新执行搜索,两个错误应该都会消失。

内容的提问来源于stack exchange,提问作者aurny2420289

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:40:00