Solr从5.5.4升级到7.7.3后multiValued字段多值提交报错问题
报错核心原因
你遇到的报错90%以上是schema配置未生效导致的,而非提交格式问题:
Solr 7.x版本默认启用托管Schema模式,如果你直接沿用Solr 5.x的schema.xml放到核心conf目录,且未修改solrconfig.xml的schema工厂配置,Solr不会读取你自定义的schema.xml,会自动生成managed-schema配置文件。此时你定义的my_field如果没有在托管配置中显式设置multiValued="true",Solr会自动识别为单值string类型,因此会抛出multiple values encountered for non multiValued field错误。
验证方法
登录Solr管理后台,进入对应核心的Schema页面,搜索my_field字段,查看multiValued属性是否为true,如果为false即可确认是schema加载问题。
Solr 7.7.3 多值字段提交要求
Solr 7.7.3完全兼容数组形式提交多值字段,不需要提交多个同名字段条目,你猜测的多同名字段提交是form表单提交场景的规则,JSON提交场景下直接传数组是标准且官方推荐的写法,示例合法提交格式:
{ "id": "你的文档ID", "my_field": ["Magic Value", "Visual-C PlusPlus", "ABC123"] }
修复步骤
- 如果确认schema未生效,修改
solrconfig.xml,将默认的ManagedIndexSchemaFactory配置替换为经典Schema工厂配置,即可让自定义的schema.xml生效:
修改后重启Solr、重载对应核心即可。<schemaFactory class="ClassicIndexSchemaFactory"/> - 如果确认schema配置正确,检查Python提交请求的
Content-Type头是否设置为application/json,如果使用application/x-www-form-urlencoded格式提交,Solr对数组的解析规则和5.x版本存在差异,容易触发该异常。
Python端提交示例(无需多同名字段)
使用Python字典完全可以实现多值字段提交,以常用的pysolr库为例:
import pysolr # 初始化Solr连接 solr_client = pysolr.Solr("http://你的Solr地址/solr/核心名") # 直接将列表作为字段值传入字典 doc = { "id": "test_doc_001", "my_field": ["Magic Value", "Visual-C PlusPlus", "ABC123"] } solr_client.add([doc])
内容的提问来源于stack exchange,提问作者GG2
相关产品推荐
相关产品推荐

