在Drupal7上使用ApacheSolr为搜索API配置DDEV

在Drupal7上使用ApacheSolr为搜索API配置DDEV,solr,drupal-7,ddev,Solr,Drupal 7,Ddev,来自《纽约时报》的@DamienMcKenna 使用D7站点创建Solr实例时遇到问题。我将conf文件复制到~/.ddev/solr/conf,但是当solr启动时,没有创建默认实例。我运行了ddev stop--remove data--omit snapshot并重新创建了该实例,但该实例仍然不存在。当我转到Solr UI检查系统时,它会显示“没有可用的内核”,当我尝试创建一个名为“dev”的系统时,它会显示: 创建SolrCore“dev”时出错:无法创建核心[dev],原因是:在类路径

来自《纽约时报》的@DamienMcKenna

使用D7站点创建Solr实例时遇到问题。我将conf文件复制到~/.ddev/solr/conf,但是当solr启动时,没有创建默认实例。我运行了
ddev stop--remove data--omit snapshot
并重新创建了该实例,但该实例仍然不存在。当我转到Solr UI检查系统时,它会显示“没有可用的内核”,当我尝试创建一个名为“dev”的系统时,它会显示:

创建SolrCore“dev”时出错:无法创建核心[dev],原因是:在类路径或“/opt/solr/server/solr/dev”中找不到资源“solrconfig.xml”


我使用DDEV版本1.11.0中的示例docker-compose-solr.yaml文件成功地完成了Drupal7项目

  • 复制到您的.ddev文件夹中,并确保第34行与要从下面的步骤2复制的solr版本相匹配,例如
    solr:6.6

  • 将文件从
    sites/all/modules/contrib/search\u api\u solr/solr conf/6.x/*.
    复制到
    .ddev/solr/conf
    文件夹中

  • 下载并启用
    search\u api\u override
    模块

  • settings.local.php
    中添加以下内容:

    //仅适用于ddev。
    $conf['search_api_override_mode']='load';
    $conf['search\u api\u override\u servers'['content']=array(
    “名称”=>“DDEV:Solr服务器”,
    “选项”=>数组(
    “主机”=>“solr”,
    “端口”=>“8983”,
    '路径'=>'/solr/dev',
    “http_用户”=>“”,
    “http_pass'=>”,
    “摘录”=>0,
    “检索_数据”=>1,
    “突出显示_数据”=>0,
    “http_方法”=>“自动”,
    ),
    );
    
    还有,ymmv。最好只覆盖单独需要的值…la:

    $conf['search\u api\u override\u servers']['content']['options']['host']='solr';
    $conf['search\u api\u override\u servers']['content']['options']['port']='8983';
    $conf['search\u api\u override\u servers']['content']['options']['host']='/solr/dev';
    
    您可能需要修改
    'content'
    数组索引,以匹配您在Drupal 7中配置为Solr索引机器名的任何内容

  • 使用
    ddev Start
    启动ddev

  • 注意,我将搜索API覆盖值放置在
    sites/default/settings.local.php
    中,而不是人们认为的逻辑位置(
    sites/default/settings.ddev.php
    ),这样就不会干扰ddev自己自动生成后一个文件

    如果DDEV在
    settings.DDEV.php
    中自动实现这一点会很酷,类似于DB服务设置的工作方式,但目前还没有这种集成级别,而且Drupal 7可能永远也不会有这种集成级别。首先,因为您需要一个额外的模块(search_api_override),该模块可能存在,也可能不存在,其次,因为用户可以根据自己的需要命名Solr服务器,所以很难实现自动化。例如,
    $conf['search\u api\u override\u servers']['content']
    可以是类似于:
    $conf['search\u api\u override\u servers']['foo']