求助:SolrRequest部分函数废弃,GenericSolrRequest的setContentStreams替代方案?
替代GenericSolrRequest.setContentStreams()的方案(Solr 7.2.1/SolrJ 7.2.1)
嘿,我对Solr 7.x版本的SolrJ API变化挺熟悉的,针对你遇到的setContentStreams()方法被弃用的问题,结合你要禁用自动提交的需求,这里有几个实用的替代方案:
1. 直接用setContentStream()方法替代
在Solr 7.2.1中,原来的setContentStreams(List<ContentStream>)被官方废弃,转而推荐使用单数形式的setContentStream(ContentStream)——大部分场景下单个内容流就足够满足需求了。
比如你之前用来发送禁用自动提交的XML请求,代码可以改成这样:
// 构造要发送的配置内容 String configXml = "<config><autoCommit><enabled>false</enabled></autoCommit></config>"; ContentStream contentStream = new ContentStreamBase.StringStream(configXml, "text/xml"); // 创建GenericSolrRequest并设置内容流 GenericSolrRequest request = new GenericSolrRequest(METHOD.POST, "/config", null); request.setContentStream(contentStream); // 执行请求 QueryResponse response = request.process(yourSolrClientInstance);
2. 用更贴合场景的API:AdminRequest.Config
如果你只是要修改自动提交这类配置,完全不用手动构造内容流,SolrJ提供了更简洁的AdminRequest.Config类来处理配置修改,代码可读性和维护性更好:
// 创建配置修改请求,指定更新配置的动作 AdminRequest.Config updateConfigRequest = new AdminRequest.Config(); updateConfigRequest.setAction(AdminRequest.ConfigAction.UPDATECONFIG); // 设置禁用自动提交的属性 updateConfigRequest.addConfigSetProperty("autoCommit.enabled", "false"); // 执行请求 updateConfigRequest.process(yourSolrClientInstance);
如果之后需要恢复自动提交,只需要把"false"改成"true"再执行一次即可。
3. 批量导入时临时禁用提交(可选)
如果你是在批量导入数据时想临时避免自动提交,还可以直接在UpdateRequest里控制提交行为,不用修改全局配置:
UpdateRequest updateRequest = new UpdateRequest(); // 添加你的批量数据文档 updateRequest.add(yourDocumentList); // 禁用本次请求的提交行为 updateRequest.setParam("commit", "false"); // 或者设置commitWithin为0,临时取消自动提交 updateRequest.setCommitWithin(0); updateRequest.process(yourSolrClientInstance);
这样只会影响当前的批量导入请求,不会改变全局的自动提交配置,适合临时场景。
内容的提问来源于stack exchange,提问作者Mrinalini Hanagodu
相关产品推荐
相关产品推荐

