Solr9启动加载Django生成的schema.xml报LatLonType类找不到如何修复
报错根因
django-haystack 默认的 Solr schema 模板未适配 Solr 8+ 版本的字段类型变更,旧版本使用的空间字段类 solr.LatLonType 已经在 Solr 8.0 版本正式移除,Solr 9.0 加载包含该类的 schema 时就会抛出 ClassNotFoundException。
修复方法
直接修改通过 python manage.py build_solr_schema 生成的 schema.xml 文件,按以下步骤调整:
- 定位到字段类型定义区块,找到name为
location、class为solr.LatLonType的配置段,原始配置通常如下:<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> - 将该配置替换为 Solr 9 兼容的空间字段类型:
<fieldType name="location" class="solr.LatLonPointSpatialField" docValues="true"/> - 查找schema中所有带
_coordinate后缀、关联旧location类型的附属字段配置,类似如下内容:
这类字段是旧<field name="location_lat_coordinate" type="tdouble" indexed="true" stored="true" multiValued="false"/> <field name="location_lng_coordinate" type="tdouble" indexed="true" stored="true" multiValued="false"/>LatLonType的依赖配置,新字段类型不需要,直接整段删除即可。 - 保存文件后重启对应Solr core,即可正常加载配置。
可选简化方案
如果你的业务不需要地理位置搜索能力,直接删除整个name="location"的fieldType定义,以及所有引用location类型的字段配置,也可以直接解决该报错。
注意:配置修改完成、Solr core正常启动后,需要重新执行
python manage.py rebuild_index命令重建全量索引,避免字段类型不兼容导致的索引写入、查询异常。
内容的提问来源于stack exchange,提问作者Nwawel A Iroume
相关产品推荐
相关产品推荐

