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

如何在ddev-solr环境中为text_en启用KStemFilterFactory?

在ddev-solr环境中启用KStemFilterFactory失败的排查问题

问题背景

我试图在ddev-solr环境中为Solr的text_en字段类型启用KStemFilterFactory,按照ddev-solr README文档的步骤,将configset目录复制到.ddev/solr/configsets/后重启ddev,但配置未生效。

已添加的配置

我在schema_extra_types.xml中为text_en字段类型添加了KStemFilterFactory配置,代码如下:

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100" storeOffsetsWithPositions="true">
  <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="accents_en.txt"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt"/>
    <filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="1" generateNumberParts="1" protected="protwords_en.txt" splitOnCaseChange="0" generateWordParts="1" preserveOriginal="1" catenateAll="0" catenateWords="1"/>
    <filter class="solr.FlattenGraphFilterFactory"/>
    <filter class="solr.LengthFilterFactory" min="2" max="100"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KStemFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.MappingCharFilterFactory" mapping="accents_en.txt"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymGraphFilterFactory" ignoreCase="true" synonyms="synonyms_en.txt" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt"/>
    <filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="0" generateNumberParts="1" protected="protwords_en.txt" splitOnCaseChange="0" generateWordParts="1" preserveOriginal="1" catenateAll="0" catenateWords="0"/>
    <filter class="solr.LengthFilterFactory" min="2" max="100"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KStemFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>

已尝试的操作

  • 将更新后的configset复制到.ddev/solr/configsets/、.ddev/solr/configsets/conf、.ddev/solr/conf目录后重启DDEV
  • 在Solr管理界面的分析工具中验证,未看到KStem生效
  • 在Drupal的搜索API服务器配置页面验证,KStem仍未启用

疑问

  1. 是否遗漏了关键启用步骤?
  2. 如何确保更新后的schema_extra_types.xml被Solr识别?
  3. 还有哪些配置或日志可用于排查该问题?

排查与解决步骤

1. 修正configset目录结构

ddev-solr要求configset必须放在 .ddev/solr/configsets/<自定义名称>/conf/ 路径下,conf目录才是存放所有Solr配置文件的正确位置。你之前复制到.ddev/solr/configsets/conf或.ddev/solr/conf的路径不符合要求,Solr不会读取这些位置的配置。

正确操作:

  • 创建 .ddev/solr/configsets/myconfig/conf 目录(myconfig可自定义)
  • 将修改后的schema_extra_types.xml及其他配置文件放入conf目录
  • 在.ddev/config.yaml中指定使用该configset:
    solr:
      configset: myconfig
    
  • 执行 ddev restart

2. 验证Solr加载的配置文件

  • 进入Solr容器:ddev exec -s solr bash
  • 查看核心配置路径:ls /var/solr/data/local/conf/(local是默认核心名)
  • 检查目标文件内容:cat /var/solr/data/local/conf/schema_extra_types.xml,确认修改已同步到容器内

3. 确认主schema文件的引入配置

Solr需要主schema文件(schema.xml或managed-schema)明确引入schema_extra_types.xml,否则不会加载自定义类型配置。检查主schema文件中是否存在以下语句:

<include file="schema_extra_types.xml"/>

如果没有,手动添加该语句后重启DDEV。

4. 查看Solr日志排查错误

  • 查看Solr容器启动日志:ddev logs -s solr
  • 重点关注schema加载阶段的报错,比如XML语法错误、配置文件路径错误等

5. 重置Solr核心(缓存清理)

如果旧配置缓存导致修改不生效:

  • 停止Solr服务:ddev stop -s solr
  • 删除Solr数据目录:rm -rf .ddev/solr/data/
  • 重启DDEV:ddev start

6. Drupal侧验证与重新索引

  • 确认Drupal搜索API服务器配置的Solr核心与你修改的核心一致
  • 在Drupal后台执行搜索API的重新索引操作,确保新的字段类型配置应用到已索引内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:54:50