因为solr系统是单独的系统,并未与本身系统结合.所以采取的是http发送json对象来做更新.
--这里给自己一个注解
solr的检索方式并不适合频繁的更新,所以原子更新的本质是删除后新建一个同主键的原子.以此来代替原有的原子.
所以原子更新时,所有的数据都必须有,缺少任何一个那么这个原子就会缺少原有的属性.
服务器版本solr5.2.1
测试环境是JDK1.8/solr5.5
String url = "http://****:8983/solr/oracle/";
SolrClient solr = new HttpSolrClient(url);
SolrInputDocument doc = new SolrInputDocument();
doc .addField("news_id", "1199801200000000057");//根据id唯一标识
Map<String,String> map=new HashMap<String, String>();
// map.put("add", "新加的field");//放入支持的操作,对多值域管用 ,增加field
map.put("set", "我爱大海2223");//对单值和多值域管用,更新field
//map.put("inc", "100");//放入支持的操作,对数值域管用
doc.addField("news_title", map);
doc.addField("content", map);
UpdateResponse response = solr.add(doc);
// server.add(doc);
solr.commit();
System.out.println("原子更新成功!");
然而测试完毕之后发现原有工程中JDK1.6并不兼容,没法使用.稍作修改
String url = "http://127.0.0.1:8983/solr/soracle/";
SolrServer solr = new HttpSolrServer(url);
SolrInputDocument doc = new SolrInputDocument();
doc .addField("news_id", "1199801200000000057");//根据id唯一标识
Map<String,String> map=new HashMap<String, String>();
map.put("set", test);//对单值和多值域管用,更新field
doc.addField("news_title", map);
doc.addField("content", map);
UpdateResponse response = solr.add(doc);
solr.commit();
System.out.println("原子更新成功!");
以上即可解决