两种创建方式
//适用查询
private static HttpSolrClient getSolrClient(String ip,String coreName){
String url = "http://" + ip + "" + "/solr/" + coreName;
HttpSolrClient build = new HttpSolrClient.Builder(url).build();
return build;
}
//适用更新索引
private static ConcurrentUpdateSolrClient getConcurrentUpdateSolrClient(String ip,String coreName,int queueSize){
String url = "http://" + ip + "" + "/solr/" + coreName;
ConcurrentUpdateSolrClient build = new ConcurrentUpdateSolrClient.Builder(url).withQueueSize(queueSize).build();
return build;
}
/**
* 批量上传数据到Solr
* @param solrIP
* @param coreName
* @param docs
* @return
*/
public static boolean batchUploadSolrDoc(String solrIP, String coreName,JSONArray docs) throws IOException, SolrServerException {
//获取solr实例
ConcurrentUpdateSolrClient solrClient = getConcurrentUpdateSolrClient(solrIP, coreName,1);//效率最高
//HttpSolrClient solrClient = getSolrClient(solrIP, coreName);//用于查询
solrClient.setParser(new XMLResponseParser());
//数据填装(主要的消耗点)
for (int i = 0,size = docs.size(); i < size; i++) {
JSONObject v = docs.getJSONObject(i);
SolrInputDocument solrInputDocument = new SolrInputDocument();
v.forEach((k,v1)-> solrInputDocument.addField(k,v1));
solrClient.add(solrInputDocument);
}
try {
UpdateResponse repc = solrClient.commit();
} catch (Exception e) {
return false;
}
return true;
}
单论提交更新索引的效率的话基本在4-5倍,左右有兴趣的可以自己测试一下.