solr的原子更新/局部更新
来源:互联网 发布:飞升真元段体数据 编辑:程序博客网 时间:2024/04/27 18:47
solr支持三种类型的原子更新:
- set - to set a field.
- add - to add to a multi-valued field.
- inc - to increment a field.
其中set可以是单值的也可以是multifiled, add 针对multi-field ,inc 对应数值类型
使用solrj进行原子更新
String zk= "127.0.0.1:2183"; String root="/solr"; CloudSolrClient solrClient=new CloudSolrClient(zk+root); solrClient.connect(); SolrInputDocument doc = new SolrInputDocument(); Map<String, String> partialUpdate = new HashMap<String, String>(); partialUpdate.put("set", "纯植物染发1次男女不限仅限短发,提供免费WiFi"); doc.addField("grouponId", "123456"); doc.addField("name", partialUpdate); Map<String,List<String>> cities=new HashMap<String, List<String>>(); List list=new ArrayList(); list.add("北京"); list.add("长春"); cities.put("set",list); doc.addField("city",cities); doc.addField("_version_",1); Map<String,String> subCat=new HashMap<String, String>(); subCat.put("add","美容"); doc.addField("subCat",subCat); Map<String,Long> price=new HashMap<String, Long>(); price.put("inc",100L); doc.addField("price",price); try { solrClient.add("groupon",doc); solrClient.commit("groupon"); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { solrClient.close(); } catch (IOException e) { e.printStackTrace(); }
原始数据:
{ grouponId: "123456", cat: [ "丽人" ], subCat: [ "美发" ], name: "纯植物染发1次男女不限仅限短发,提供免费WiFi1", price: 67.80000305175781, startTime: "2015-08-31T06:16:35Z", endTime: "2016-06-25T15:59:59Z", postTime: "2015-11-04T10:25:33.914Z", city: [ "北京市", "长春市" ], region: [ "新郑市" ], district: [ "炎黄广场" ], _version_: 1535465635791765500}
执行代码后:
{ grouponId: "123456", cat: [ "丽人" ], subCat: [ "美发", "美容" ], name: "纯植物染发1次男女不限仅限短发,提供免费WiFi", price: 167.8000030517578, startTime: "2015-08-31T06:16:35Z", endTime: "2016-06-25T15:59:59Z", postTime: "2015-11-04T10:25:33.914Z", city: [ "北京", "长春" ], region: [ "新郑市" ], district: [ "炎黄广场" ], _version_: 1535467687828783000}
关于更新中传入的_version_值说明:
- version<0,如果这个文档存在,则solr会拒绝修改,如果不存在,则add这个文档
- 当version=0时,如果待修改的文档存在,则修改这个文档,如果不存在。则add这个文档
- version=1 ,如果文档存在,则update这个文档,如果不存在,则拒绝修改,
- version>1, 如果文档的_version_值和传入的version值不一样,则拒绝修改,值一样则修改。
原子更新的几点问题:
- 如果有字段的store=false,但是在更新的时候没有给这个字段设置值,则这个字段在更新的时候数据会被丢掉; store=true的字段则不会。
- 针对multi-field字段,如果store=false, 则在原子更新 使用add时也会把这个字段之前的数据丢掉。
0 0
- solr的原子更新/局部更新
- Solr的原子更新
- solr 原子更新
- solr lucence局部更新
- solr 局部更新
- solr原子更新-即指定更新某个字段的值
- solr/solrj之原子更新
- solr的索引更新
- solr原子更新,包括4.X/5.X
- 局部更新
- solr增量更新的字段
- Java 原子的域更新器
- java原子更新器AtomicReferenceFieldUpdater的使用
- java原子更新器AtomicReferenceFieldUpdater的使用
- java Atomic原子更新
- 开发更新Solr索引的工具
- 关于Solr定时更新的那些事
- 关于GridView,UpdatePanel的局部更新与全局更新
- 大
- Linux进程控制基础(七)
- 搭建paxos测试过程
- 获取焦点,手动隐藏软键盘
- CodeForces - 357C C - Knight Tournament 并查集or set模拟
- solr的原子更新/局部更新
- Jmeter学习_001 初识
- Ubuntu命令总结1
- 架构,框架和设计模式的区别
- 单独启动Microsoft Help Viewer的方法
- java设计模式(五)
- 第13期 《仰望星空,脚踏实地》 12月刊
- xml基础(一)
- VMWare/VirtualBox三种网络模式及NAT/host-only模式设置上网与主机互联通信