`
weitao1026
  • 浏览: 1062287 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

solr原子更新功能

阅读更多

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的方式,请点击此处

具体的核心代码如下:

Java代码 复制代码 收藏代码
  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. }  
分享到:
评论

相关推荐

    solr基础知识介绍

    Solr支持实时获取文档的最新版本,原子更新文档,支持多层Facet,并且提供了基于关联度的Pseudo-Join操作。Solr还具备Web管理界面,并支持SolrCloud。 Solr的术语部分涉及到了多个与Solr操作相关的概念,例如Auto-...

    使用MySQL作为SOLR的索引源

    4. **触发索引更新**:可以通过SOLR的API或Web界面来触发全量或增量数据导入,使SOLR根据MySQL中的最新数据更新索引。 接下来,我们关注到`schema.xml`文件。这是SOLR的核心配置文件,定义了索引的字段类型和字段。...

    solrcloud与zookeeper

    5. **原子性**:数据更新要么全部完成,要么完全不执行。 6. **顺序性**:分为全局有序和局部有序两种。全局有序意味着在同一台服务器上的操作顺序会被所有服务器所保持;局部有序指同一名客户端的连续两次更新操作...

    Java微服务考试试题.pdf

    * Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供 * Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch 数据库...

    javashop大型分布式电商

    - **分布式事务**:确保跨服务调用时的一致性和原子性。 #### 四、项目流程图绘制 项目流程图的设计主要包含了以下环节: 1. **需求分析**:明确项目的目标、范围以及预期成果。 2. **系统设计**:根据需求分析...

    PHP技术点整理,redis,swoole,搜索引擎,lua,面试题练习

    Redis支持原子操作,确保了数据一致性。在面试中,可能会遇到关于Redis的数据类型和操作、持久化策略(RDB和AOF)、主从复制、Sentinel高可用性以及Cluster集群的相关问题。 其次,Swoole是PHP的一个扩展,它为PHP...

    第01章_数据库概述1

    SQL是用于查询、更新和管理关系数据库的标准语言,提供了数据增、删、改、查等基本功能。 除了关系型数据库,还有多种非关系型数据库类型,如键值型数据库Redis,用于高速缓存和数据持久化;文档型数据库MongoDB,...

    HBase存储的研究与应用-PaperAsk检测报告.zip

    8. **生态组件**:HBase生态系统包括Phoenix(SQL接口)、HBase Coprocessors(在RegionServer端执行的自定义逻辑)、HBase Indexer(用于Solr和Elasticsearch的索引)等,这些工具极大地扩展了HBase的功能。...

    Java基于SSM(Spring+SpringMVC+MyBatis)高速公路收费系统.zip

    SSM框架组合是Java开发中的常见选择,因为它们提供了强大的功能和灵活性,使得开发高效、可维护的后端服务成为可能。 1. **Spring框架**:Spring是Java企业级应用的核心框架,它提供了一个全面的编程和配置模型,...

    hibernate5.5.4

    8. **事务管理**: Hibernate支持JTA(Java Transaction API)和JPA(Java Persistence API)的事务管理,确保数据操作的原子性、一致性、隔离性和持久性。 9. **懒加载和立即加载**: Hibernate的懒加载策略可以延迟...

    基于Struts2+MySQL BBS论坛

    3. **搜索功能**: 实现对论坛内容的全文搜索,可能需要使用MySQL的全文索引或第三方搜索引擎如Solr。 4. **权限管理**: 通过Struts2的拦截器实现不同用户角色(如普通用户、管理员)的权限控制。 5. **页面展示**:...

    史上最难PHPer测试题与其答案

    - **答案解析**:Solr 是基于 Lucene 的企业级搜索平台,它提供了一个高级的搜索服务器,具有更丰富的功能和更好的性能。相比于 Lucene,Solr 提供了更多的高级特性,比如分布式搜索、近实时索引、高亮显示、拼写...

    精品课程推荐 大数据与云计算教程课件 优质大数据课程 16.Hive操作(共43页).pptx

    本系列课程包括多个主题,如Hadoop、MapReduce、YARN、HDFS、序列化、Zookeeper、Sqoop、Flume、Kafka、Storm、Spark等,以及数据存储与分析工具Hive、HBase、Pig、Impala、Solr、Lily、Titan和Neo4j等。 【Hive...

    数据库总结1

    关系型数据库是最常见的数据库类型,遵循ACID(原子性、一致性、隔离性和持久性)原则,支持SQL查询语言,数据以表格形式组织,通过键值关联实现数据之间的关系。它们在企业级应用中占据主导地位,尤其适合处理结构...

    HBase+官方文档-高清文字版

    5. **读写操作**:HBase支持高效的随机读取和写入,数据的读取基于行键,而写入则是原子性的。通过Get和Put操作进行读写,Scan则用于批量读取。 6. **数据分区与分布**:HBase通过Region进行数据分区,Region会随着...

    百度持续交付项目组面试题

    这个问题可以通过遍历数组,用一个变量来跟踪当前最长字符串的长度,并更新最长字符串的引用。 **示例代码**: ```java public class LongestString { public static String findLongest(String[] arr) { if (arr...

    zookeeper基本知识

    Zookeeper的主要功能是提供一组高性能、稳定且易于使用的API,帮助开发者解决分布式环境中常见的协调问题,如配置维护、域名服务、分布式同步、组服务等。 **特点总结:** 1. **源码开放**:Zookeeper的核心代码...

    zk搜索

    3. **原子性**:所有的操作要么成功,要么失败,没有中间状态。 4. **可靠性**:一旦一个客户端发起的更新操作被应用,那么除非客户端显式删除,否则该数据将一直存在。 5. **会话和临时节点**:会话保证了在会话存...

    各类型数据库4月排名,基于排名网站数据爬虫json结果

    6. **搜索引擎**(Search Engine):如Elasticsearch、Solr,提供全文搜索和数据分析功能,适用于大量文本数据的索引和查询。 7. **对象导向数据库**(Object-Oriented Database, OODBMS):如Objectivity/DB、...

    构建高效的研发与自动化运维.docx

    3. **原子指令系统**:支持大规模服务器集群的操作,提高运维效率。 4. **搜索平台**:提供高效的数据检索能力,支持大量数据的快速查找。 5. **推荐计算平台**:支持海量用户数据的计算,提供个性化推荐服务。 6. *...

Global site tag (gtag.js) - Google Analytics