使用CMD向Solr提交JSON文档时持续出现400错误求助
排查Solr 7.2提交JSON文档时的400 Bad Request错误
我来帮你一步步拆解这个问题——Solr的400错误通常都是细节没匹配上,咱们从最容易忽略的地方开始查:
1. 先确认JSON格式绝对合规
SimplePostTool对JSON的格式要求很严格,哪怕一个多余的逗号都会触发报错:
- 确保唯一键
ID的字段名和schema.xml里的定义大小写完全一致(Solr字段名大小写敏感),而且值的类型要匹配(比如schema里ID是string类型,JSON里就要加双引号:"ID": "doc_001") - 检查JSON里有没有多余的尾逗号,比如最后一个字段后面别加逗号,这是常见的语法错误
- 给你一个合规的示例JSON:
{ "ID": "user_123", "username": "test_user", "email": "test@example.com" }
2. 核对SimplePostTool的命令是否正确
在CMD里提交的命令格式不能错,比如:
java -jar solr-7.2.0/dist/post.jar -c your_core_name ./your_doc.json
- 替换
your_core_name为你实际的Solr核心名称,别写错了 - 如果JSON文件不在当前目录,要写完整的绝对路径(比如
C:\solr_data\docs\my_doc.json) - 如果是直接传JSON字符串,CMD里的引号要转义,比如:
java -jar post.jar -c your_core_name -d "{\"ID\":\"doc_001\",\"username\":\"test\"}"
3. 检查solrconfig.xml的请求处理器配置
你已经添加了请求处理器,再确认一下配置是否正确,确保/update处理器是启用状态:
<requestHandler name="/update" class="solr.UpdateRequestHandler"> <lst name="defaults"> <!-- 这里可以加默认参数,比如更新提交策略,没有的话留空也没关系 --> </lst> </requestHandler>
注意别把这个配置注释掉,Solr7.2默认其实自带/update处理器,但如果自定义了,要确保类名和参数都正确。
4. 查看Solr的详细日志(最关键!)
400错误只是一个笼统的状态码,Solr的日志里会有具体的错误原因——比如“缺少必填字段ID”、“字段xxx未在schema中定义”之类的。
- 日志文件在Solr安装目录的
server/logs下,比如solr.log - 搜索你提交请求的时间点,找到对应的错误信息,这能直接定位问题根源(比如你看到的IO异常其实是服务器返回400导致的,日志里会有更详细的报错)
5. 确认schema.xml的配置生效
修改schema.xml后,必须让Solr核心重新加载配置:
- 要么重启整个Solr服务
- 要么在Solr Admin的「Core Admin」页面,选中你的核心,点击「Reload」按钮
另外再核对: <uniqueKey>ID</uniqueKey>是不是正确设置了- 新增的字段是不是都正确定义了,比如:
<field name="ID" type="string" indexed="true" stored="true" required="true"/> <field name="username" type="string" indexed="true" stored="true"/>
最后总结
先去看Solr日志!这是最快找到问题的方法,很多时候400错误都是字段名不匹配、JSON语法错、或者schema没重载导致的,按上面的步骤逐一排查应该就能解决。
内容的提问来源于stack exchange,提问作者Panda
相关产品推荐
相关产品推荐

