如何在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仍未启用
疑问
- 是否遗漏了关键启用步骤?
- 如何确保更新后的
schema_extra_types.xml被Solr识别? - 还有哪些配置或日志可用于排查该问题?
排查与解决步骤
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
相关产品推荐
相关产品推荐

