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_值说明:
  1. version<0,如果这个文档存在,则solr会拒绝修改,如果不存在,则add这个文档
  2. 当version=0时,如果待修改的文档存在,则修改这个文档,如果不存在。则add这个文档
  3. version=1 ,如果文档存在,则update这个文档,如果不存在,则拒绝修改,
  4. version>1, 如果文档的_version_值和传入的version值不一样,则拒绝修改,值一样则修改。
 
原子更新的几点问题:
  1. 如果有字段的store=false,但是在更新的时候没有给这个字段设置值,则这个字段在更新的时候数据会被丢掉; store=true的字段则不会。
  2. 针对multi-field字段,如果store=false, 则在原子更新 使用add时也会把这个字段之前的数据丢掉。
 

solr的原子更新/局部更新的更多相关文章

  1. Solr 18 - 通过SolrJ局部更新Solr中的文档 (原子操作、非覆盖操作)

    目录 1 需求分析 2 需求实现 2.1 pom.xml依赖 2.2 Java代码示例 3 补充说明 3.1 关于文档中_version_的取值说明 3.2 store=true/false的区别 1 ...

  2. 升级至webpack4.x踩坑记(热更新局部更新失败的问题修复)

    零.前言 webpack升级的时候,会碰到各种个样的问题,大多数网上都能查到解决方案最简单的方案. 思路如下: 1.把css-loader,xxxloader等依赖都升级到最新 2.根据webpack ...

  3. WebApiClient的JsonPatch局部更新

    1. 文章目的 随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍使用WebApiClient来完成JsonPatch提交的新 ...

  4. 通过Solrj实现对索引库中数据的局部更新操作

    for (UpdateIndexDTO updateIndexDTO : data) { // 局部更新 SolrInputDocument doc = new SolrInputDocument() ...

  5. .Net页面局部更新的思考

    最近在修改以前做的模块,添加一个新功能.整理了下才发现重用率很低,大部分的东西还是需要重新写.功能里用到了局部更新,所有整理一下一路来实现局部更新的解决方案及改进. 我接触的项目开发大多是以Asp.n ...

  6. 【SSH网上商城项目实战28】使用Ajax技术局部更新商品数量和总价

         转自: https://blog.csdn.net/eson_15/article/details/51487323 昨天把项目部署了一下,玩了玩,今天完善了一下购物车中修改商品数量就能局部 ...

  7. winform 实现局部更新(如ajax实现)而整个界面不产生闪烁的解决方案

    转自原文winform 实现局部更新(如ajax实现)而整个界面不产生闪烁的解决方案 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET ...

  8. Elasticsearch之更新(全部更新和局部更新)

    前面的基础, Elasticsearch之curl创建索引库 Elasticsearch之curl创建索引 Elasticsearch之curl创建索引库和索引时注意事项 Elasticsearch之 ...

  9. ASP.Net Core使用Ajax局部更新

    由于目前ASP.NET Core中没有提供Ajax帮助器,所以参照 上一篇帖文,使用data-ajax-*属性来使用jQuery Unobtrusive Ajax功能实现HTML的局部页面元素更新. ...

随机推荐

  1. ASP获取当前页面带参数的网址(URL地址)的方法

    '获取当前Url参数的函数 Function GetUrl() Dim ScriptAddress,Servername,qs ScriptAddress = CStr(Request.ServerV ...

  2. ACM——01排序

    http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1024 01排序 时间限制(普通/Jav ...

  3. HW-找7(测试ok满分注意小于等于30000的条件)

    输出7有关数字的个数,包括7的倍数,还有包含7的数字(如17,27,37...70,71,72,73...)的个数 知识点 循环 运行时间限制 0M 内存限制 0 输入 一个正整数N.(N不大于300 ...

  4. linux系统文件属性

    1  硬链接概念 硬链接是指通过索引节点(Inode)来进行链接,在Linux(ext2,ext3)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(I ...

  5. Oracle Text Slowly

    When  oracle text more and more slowly, execute the following script: ANALYZE TABLE Table_Name COMPU ...

  6. Apache中的权限设置

        今天,我们的关注点就集中在 order deny,allow 这个语句中.在网上找了些资料,对它有了一些了解,写在这儿. 我们可能对apache中这个权限设置可能不太清楚,不同的顺序对权限到底 ...

  7. Action Filters for ASP.NET MVC

    本文主要介绍ASP.NET MVC中的Action Filters,并通过举例来呈现其实际应用. Action Filters 可以作为一个应用,作用到controller action (或整个co ...

  8. 暑假集训(2)第五弹 ----- Who's in the Middle(poj2388)

    G - Who's in the Middle Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32 ...

  9. c++中动态尾随内存的技巧和定位new

    c 和 c++ 最大的特点就是对内存的自由操作,数据类型,其实都是对内存的一种解释方式.C语言中常用的一个技巧就是尾随数据,网络编程中经常会用到这个特性, 特别是以前写完成端口的时候,这个特性肯定是会 ...

  10. json 包含字段及函数的写法

    在javascript中写类有多种方式: 1.function()中嵌套function; 2.prototype的方式 ,3.json的方式,如下: <script language=&quo ...