Solr中特定字段值更新未生效问题求助
Solr文档字段更新不生效问题排查与解决
问题描述
尝试通过curl更新Solr文档中code字段的值,执行请求后返回状态码0,但字段新值未生效。执行的命令及响应如下:
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8390/solr/collection/update' -d '[{"id" : “12345”,”code” : {"set" : “500”}}]’
响应:
{ "responseHeader":{"rf":1,"status":0,"QTime":11}}
排查与解决方案
1. 修正JSON中的中文引号问题
请求数据里使用了中文全角引号“”,而JSON规范要求必须使用英文半角引号""。这会导致Solr无法正确解析更新指令,即便返回状态码0,实际更新操作并未执行。
修正后的命令:
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8390/solr/collection/update' -d '[{"id": "12345", "code": {"set": "500"}}]'
2. 强制提交更新
Solr默认不会立即将更新同步到索引,需要显式发送commit指令确保变更生效。有两种方式实现:
- 更新时附带commit参数:
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8390/solr/collection/update?commit=true' -d '[{"id": "12345", "code": {"set": "500"}}]'
- 单独发送commit请求:
curl -X POST 'http://localhost:8390/solr/collection/update?commit=true'
3. 确认字段配置支持更新
检查Solr的schema配置文件(schema.xml或managed-schema),确保code字段的stored属性设置为true,且字段类型支持更新。如果字段为unstored,即便更新成功也无法检索到新值。
示例配置:
<field name="code" type="string" indexed="true" stored="true"/>
4. 验证目标文档是否存在
确认id为12345的文档确实存在于目标集合中,可通过查询验证:
curl 'http://localhost:8390/solr/collection/select?q=id:12345'
如果查询不到该文档,更新操作自然不会生效,需先确认文档存在性。
内容的提问来源于stack exchange,提问作者Eli Johnes
相关产品推荐
相关产品推荐

