solr4.x发布以后,最值得人关注的一个功能,就是原子更新功能,传说的solr是否能真正的做到像数据库一样,支持单列更新呢? 在solr官方的介绍中,原子更新是filed级别的更新,不会涉及整个Documnet级别的更新,但事实真是如此吗,经散仙验证,并非如此,原子更新这种功能,在Lucene层面上,就否定了这种方式,因为是索引存储结构,决定了它的更新方式,在Lucene中我们想更新一条数据怎么办?

很简单,删除原来的数据,在添加一条数据进去,那么假如,我们只更新了某一个字段呢,也要删除整条数据,重新添加?
没错,事实就是这样,严格来说,在Lucene索引中,并不存在更新删除一说,即使是删除,也是伪删除,临时打一个删除标签,在下次索引合并时,会清理掉标记的标签,Lucene的索引存储结构与HDFS的的结构从某种程度上来说,是相似的,仅仅支持Append操作。

那么如何验证原子更新,到底是不是真的是原子更新呢,这个很好办,我们只需要关注更新后的doc的docid有没有变化,即可验证,为什么这样讲?

在lucene里每个doc都有一个唯一的docid,默认情况下docid,是自增的,每增加一行数据,docid就会新增一个,删除后的docid,在下次merge的时候,会重置倒排表docid顺序,这个docid与Oracle的rownum伪列是非常类似的。

不过话说回来,虽然原子更新功能只是一个华而不实的功能,但是solr对其进行了封装,这样以来使得我们操作solr更加容易和方便,下面介绍下在solr中原子更新的内容,和使用方式。





原子更新注意事项:

1,想支持原子更新的field,必须存储(store=true),否则,使用将会出现问题

2,需要在solrconf.xml配置<updateLog/>,这一点默认就已经不配置了,也就是说我们只需要记住原子更新的域需要存储即可。

原子更新支持的操作:

1,set操作,是指对单,多值域的一种更新(覆盖操作)

2,add操作,仅多多值域生效,给多值域添加一个内容

3,inc操作,对数值域进行一次自增操作,举个例子,原来的值是,10,这次

你inc=3,那么更新后的值就是13

在本文,散仙只介绍,以solrj的操作方式,如果想详细了解更多其他方式,比如json或xml的方式,请点击此处

具体的核心代码如下:

    1. /**
    2. * 原子更新方式
    3. * */
    4. public static void atomUpdate1Store()throws Exception{
    5. SolrInputDocument sd = new SolrInputDocument();
    6. sd.addField("id", "1");//根据id唯一标识
    7. HashMap<String,String> map=new HashMap<String, String>();
    8. map.put("add", "国际1");//放入支持的操作,对多值域管用
    9. //map.put("set", "国际1");//放入支持的操作,对单值和多值域管用
    10. //map.put("inc", "国际1");//放入支持的操作,对数值域管用
    11. sd.addField("dname", map);
    12. server.add(sd);
    13. server.commit();
    14. System.out.println("原子更新成功!");
    15. }

solr4.x之原子更新的更多相关文章

  1. solr的原子更新/局部更新

    solr支持三种类型的原子更新: set - to set a field. add - to add to a multi-valued field. inc - to increment a fi ...

  2. solr/solrj原子更新

    lucene原子更新自己不用多介绍,但solr它的包装,下面是一个简单的介绍是:这个操作是用于索引非常有用. 详细在代码中使用例如以下: /** * 原子更新方式 * */ public static ...

  3. [Java] 集合框架原理之二:锁、原子更新、线程池及并发集合

    java.util.concurrent 包是在 Java5 时加入的,与 concurrent 的相关的有 JMM及 AbstractQueuedSynchronizer (AQS),两者是实现 c ...

  4. Solr搜索引擎【索引提交、事务日志、原子更新】

    一.索引提交 当一个文档被添加到Solr中,但没有提交给索引之前,这个文档是无法被搜索的.换句话说,从查询的角度看,文档直到提交之后才是可见的.Solr有两种类型的提交:软提交和正常提交[也称硬提交] ...

  5. AtomicIntegerFieldUpdater字段原子更新类

    本文链接:https://blog.csdn.net/anLA_/article/details/78662383前面讲的两个AtomicInteger和AtomicIntegerArray,这两个都 ...

  6. 【记录】【solr】solr7.2.1原子更新

    就是说只更新指定的字段,没有的字段则添加,有的字段则替换,没有指定更新的字段不会被删除 原来的数据只有id和name这两个字段 java操作,更新一个字段,id用于指定数据 结果,name字段没有被删 ...

  7. Java原子属性更新器AtomicReferenceFieldUpdater的使用

    AtomicReferenceFieldUpdater是基于反射的工具类,用来将指定类型的指定的volatile引用字段进行原子更新,对应的原子引用字段不能是private的.通常一个类volatil ...

  8. ENode框架Conference案例分析系列之 - 复杂情况的读库更新设计

    问题背景 Conference案例,是一个关于在线创建会议(类似QCon这种全球开发者大会).在线管理会议位置信息.在线预订某个会议的位置的,这样一个系统.具体可以看微软的这个项目的主页:http:/ ...

  9. MongoDB 文档的更新操作

    在MongoDB中,更新单个doc的操作是原子性的.默认情况下,如果一个update操作更新多个doc,那么对每个doc的更新是原子性的,但是对整个update 操作而言,不是原子性的,可能存在前面的 ...

随机推荐

  1. tomcat版本号的修改

    我的是8.5.0我将其改为8.0.0    其他版本改也是一样      我改这个版本号就是因为eclipse上没有tomcat8.5.0的配置  所以将其改为8.0.0     在配置web服务器时 ...

  2. cache和buffer区别

     Cache: 一般用于读缓存,用于将频繁读取的内容放入缓存,下次在读取相同的内容,直接从缓存冲读取,提高读取性能,缓存可以有多级. Buffer:一般用于写缓存,用于解决不同介质直接存储速度的不同, ...

  3. STM32 PWM输出(映射)

    STM32 的定时器除了 TIM6 和 7.其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.而通用定时器也能同时产生多达 4 ...

  4. 【JVM】jvm至jstack命令

    一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...

  5. 前端css规范

    文章整理了Web前端开发中的各种CSS规范,包括文件规范.注释规范.命名规范.书写规范.测试规范等. 一.文件规范 1.文件均归档至约定的目录中(具体要求以豆瓣的CSS规范为例进行讲解): 所有的CS ...

  6. event store

    Event Store The documentation has now moved to the wiki in this repository. For a quick start, look  ...

  7. RabbitMQ 知识点

    mac下 rabbitmq 安装: brew命令 brew install rabbitmq 注意: rabbitmq的安装目录: /usr/local/Cellar/rabbitmq/3.6.6 r ...

  8. win10下ASP.NET Core 2.0部署环境搭建(转)

    此文用于记录在win10环境下,新建的Asp.net Core 2.0 Web应用项目如何运行在IIS上 一.运行环境 操作系统: Window10 家庭中文版 版本 10.0.15063 版本 15 ...

  9. [C++ Primer] : 第11章: 关联容器

    目录 使用关联容器 关联容器概述 关联容器操作 无序容器 使用关联容器 关联容器与顺序容器有着根本的不同: 关联容器中的元素是按关键字来保存和访问的, 按顺序容器中的元素是按它们在容器中的位置来顺序保 ...

  10. win xp 安装 VS2010 时要重启是因为没安装WINDOWS INSTALLER 4.5

    win xp 安装 VS2010 时要重启是因为没安装WINDOWS INSTALLER 4.5. 无意间看到VS2010安装列表中有一项是 WINDOWS INSTALLER 4.5 . 装这个玩意 ...