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. linux下挂载iso镜像的方法

    新建目录/mnt/cdrom 执行命令 mount /dev/cdrom /mnt/cdrom [root@ocdp1 cdrom]# mount /dev/cdrom /mnt/cdrom moun ...

  2. ubuntu中安装monodevelop

    sudo apt-get install monoDevelop sudo apt-get install build-essentialsudo apt-get install mono-devel ...

  3. 12天学好C语言——记录我的C语言学习之路(Day 7)

    12天学好C语言--记录我的C语言学习之路 Day 7: 昨天进行了一天的数组学习,今天大家可以先写几个昨天的程序热热身,回顾回顾,然后今天第一个新程序也是关于数组的,比较难,准备好就开始啦! //输 ...

  4. 使用jQuery调用ASP.NET WebService的简易教程

    鉴于使用Javascript调用Web Service配置略麻烦,所以记录一下. 1. 新建一个Web服务(WebService.asmx) 2. 取消注释// [System.Web.Script. ...

  5. Html5 js FileReader接口

    用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据.到目前文职,只有FF3.6+和Chrome6 ...

  6. JAVA笛卡尔曲线

    效果图如下: import java.applet.*; import java.awt.*; public class Descartes extends Applet { int AppletWi ...

  7. How to: Declare encoding UTF-8 in python

    References: http://stackoverflow.com/questions/12238307/declaring-encoding-in-python http://stackove ...

  8. mysql cluster 安装配置方案

    mysql cluster (mysql 集群)安装配置方案   一.准备 1.准备服务器 计划建立有5个节点的MySQL CLuster体系,需要用到5台服务器,但是我们做实验时没有这么多机器,可以 ...

  9. 超过130个你需要了解的vim命令

    基础 :e filename Open filename for edition :w Save file :q Exit Vim :q! Quit without saving :x Write f ...

  10. hdu 5009 Paint Pearls

    首先把具有相同颜色的点缩成一个点,即数据离散化. 然后使用dp[i]表示涂满前i个点的最小代价.对于第i+1个点,有两种情况: 1)自己单独涂,即dp[i+1] = dp[i] + 1 2)从第k个节 ...