`
qindongliang1922
  • 浏览: 2181065 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117401
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125817
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59813
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71227
社区版块
存档分类
最新评论

solr4.x之原子更新

    博客分类:
  • 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的方式,请点击此处

具体的核心代码如下:

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




0
0
分享到:
评论
3 楼 q474818917 2015-04-29  
qindongliang1922 写道
q474818917 写道
原子更新有时会出现一个问题,solrCloud存在重复ID的document
不知道您是否遇到过?


solr里面id重复会覆盖,不知道,你怎么得出的id重复了?难道不是主键么


id是主键,但是在solrcloud中有可能出现了重复的ID
第一次搜索
docs": [
      {
        "id": "23937",
        "orgType": 4
      }
]
第二次搜索
docs": [
      {
        "id": "23937",
        "name": "what"
      }
]
2 楼 qindongliang1922 2015-04-28  
q474818917 写道
原子更新有时会出现一个问题,solrCloud存在重复ID的document
不知道您是否遇到过?


solr里面id重复会覆盖,不知道,你怎么得出的id重复了?难道不是主键么
1 楼 q474818917 2015-04-28  
原子更新有时会出现一个问题,solrCloud存在重复ID的document
不知道您是否遇到过?

相关推荐

    ik-analyzer-solr7.x.zip

    &lt;fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"&gt; &lt;tokenizer class="org.apache.lucene.analysis.cn.ik.IKTokenizerFactory" useSmart="true"/&gt; &lt;tokenizer class="org....

    ik-analyzer-solr7.zip

    &lt;fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/&gt; &lt;tokenizer class="org.wltea....

    ik-analyzer-solr 6.x.x

    solr 6.x.x , ik 分词器, 可以实现对一段汉字进行分词处理, 支持配置扩展词语, 在分词时, 对特定词语不进行分词

    solr6.x_IK中文分词工具

    &lt;fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/&gt; &lt;tokenizer class="org.wltea....

    ik-analyzer-solr-6.x.jar

    solr更新到6.x的版本了,ik-analyzer-5.x.jar又不好使了。 无意间从"随-忆"的博客中看到了如何去修改源代码,从而让分词器能够适应6.x的版本,亲自尝试了一下,果然可以,于是奉上了自己重新编译的jar包。 6.x的版本...

    Mastering Apache Solr 7.x An expert guide to advancing, optimizing, 无水印转化版pdf

    - **版本更新要点**:本书聚焦于Apache Solr 7.x版本的核心特性和新增功能,包括性能提升、稳定性增强及API改进等方面。 - **适用读者**:主要面向已经具备一定Apache Solr使用经验的技术人员,旨在帮助他们深入了解...

    solr4.X所用IKAnalyzer中文分词器jar包

    Solr4.X是Apache Lucene项目的一个开源搜索引擎服务器,它提供了全文检索、命中高亮、 faceted search(分面搜索)等多种高级功能。在处理中文文档时,由于中文的复杂性,如词语边界不明显,需要使用特定的中文分词...

    solr-dataimport-scheduler(Solr7.x).jar

    这是属于Solr7.X版本的全量、增量更新jar包,有很多版本的这个jar包是没有更新过的,因为这个jar包是爱好者开发的,并不是官方维护,所以很难找到,我是用了两天才找到。

    solr-dataimport-scheduler.jar 可使用于solr7.x版本

    Solr 数据导入调度器(solr-dataimport-scheduler.jar)是一个专门为Apache Solr 7.x版本设计的组件,用于实现数据的定期索引更新。在理解这个知识点之前,我们需要先了解Solr的基本概念以及数据导入处理...

    solr 6.x能够使用的IKAnalyzer分词器

    网上有很多关于IKAnalyzer分词器的jar,但当我们使用solr 6.x进行配置的时候,就发现会各种各样的报错,最常出现的问题就是抽象方法错误,其实就是因为我们使用的IKAnalyzer版本和solr版本不匹配导致系统无法根据...

    Solr_5.x版本配置完成

    基于solr5.x版本,在此之上,已经配置了相应的jar包,IKAnalyzer中文分词器,和一个简单的solrHome.下载之后可以直接放到tomcat的webapps路径下启动tomcat就能运行看到效果了。

    solr5.5.x的中文分词IKAnalyzer

    &lt;fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"&gt; &lt;tokenizer class="org.apache.lucene.analysis.cn.ik.IKTokenizerFactory" conf="IKAnalyzer.cfg.xml"/&gt; ...

    solr 5.x 和 6.x 最新中文分词器

    &lt;fieldType name="text_ik" class="solr.TextField"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/&gt; &lt;tokenizer class="org.wltea.analyzer.lucene....

    支持solr6.x的中文分词,对solr7的支持暂时没有测试过

    &lt;fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/&gt; &lt;tokenizer class="org.wltea....

    solr.war包solr.war包solr.war包solr.war包solr.war包

    solr.warsolr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包...

    apache-solr-dataimportscheduler-1.0.zip_official54l_solr 5.x定时生成

    在Solr 5.x版本中,为了实现数据的定时更新,用户需要借助特定的扩展来实现定时生成索引。"apache-solr-dataimportscheduler-1.0.zip"是一个官方发布的54l版本,专门针对Solr 5.x的定时索引生成需求。 数据导入调度...

    solr中文分词器ik-analyzer-solr7.x

    在Solr中,分词器是核心组件之一,负责对输入的中文文本进行分词处理,生成可以被索引和查询的关键词。IK Analyzer作为Solr的插件,可以实现以下功能: 1. **中文分词**:通过内置的中文词典,将输入的中文句子拆分...

    solr7.x-ik分词器亲测可用.zip

    &lt;fieldType name="text_ik" class="solr.TextField"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/&gt; &lt;tokenizer class="org.wltea.analyzer.lucene....

Global site tag (gtag.js) - Google Analytics