solr/solrj之原子更新

lucene本身对原子更新没有太多的介绍,但solr对其进行了封装,这里简单做个介绍;这点操作还是对索引很实用的。

具体在代码中使用如下:

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

当然要注意一点的是,操作的field必须为存储(store="true"),否则更新的索引会覆盖前面的索引。

时间: 2024-08-06 22:42:08

solr/solrj之原子更新的相关文章

solr原子更新

最近在配合研发做ubd的项目,简单的说就是一张大宽表,有200个字段,而且数据量特别巨大(1亿级别的数据量),传统的数据库是不适合的,因此考虑基于lucene的solr,并且推荐使用solr cloud的功能来做高可用和sharding(后面会更新对solr和lucene的代码学习). 数据从hive计算插入到solr中,根据github上的代码自己做了修改,实现了hive2solr的功能.其实数据的最终插入还是调用了SolrInputDocument类的对应方法. 默认情况下对solr 添加和

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

一.索引提交 当一个文档被添加到Solr中,但没有提交给索引之前,这个文档是无法被搜索的.换句话说,从查询的角度看,文档直到提交之后才是可见的.Solr有两种类型的提交:软提交和正常提交[也称硬提交]. 1.正常提交 Solr正常提交是将所有未提交的文档写入磁盘,并刷新一个内部搜索器组件,让新提交的文档能够被搜索.搜索器实际上可以看作索引中所有已提交文档的只读视图.可以这样说,硬提交是花销很大的操作,由于硬提交需要开启一个新搜索器,所以会影响到查询性能. 当正常提交成功后,新提交的文档被安全保存

solr4.x之原子更新

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

[solr] - SolrJ增删查

使用SolrJ进行对Solr的增.删.查功能. 参考引用: http://wiki.apache.org/solr/Solrj Eclipse中新建一个项目:TestSolr 其中SorlJ的Lib包包括: 代码: 建一个Item Entity package com.my.entity; import java.util.Date; import org.apache.solr.client.solrj.beans.Field; public class Item { @Field priva

solr/solrj按id进行索引更新

最近项目要求solr能够实现索引根据id进行field的局部更新,于是在网上查找了些资料,终于找到了方法,并进行了封装,简单分享下主要方法体(这里是通过solr api进行的solrj操作索引): ... public void UpdateIndex() { JSONArray content = new JSONArray(); JSONObject json = new JSONObject(); JSONObject set = new JSONObject(); JSONObject

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

就是说只更新指定的字段,没有的字段则添加,有的字段则替换,没有指定更新的字段不会被删除 原来的数据只有id和name这两个字段 java操作,更新一个字段,id用于指定数据 结果,name字段没有被删除掉 再操作 只改变password字段 主要就是 SolrInputDocument solrInputDocument = new SolrInputDocument(); Map<String, Object> map = new HashMap<>(); map.put(&qu

Solr JAVA客户端SolrJ 4.9使用示例教程

摘要 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询solr索引的JAVA接口.SolrJ针对Solr提供了Rest 的HTTP接口进行了封装,SolrJ底层是通过使用httpClient中的方法来完成Solr的操作. SolrJ Solr POJOs 客户端 目录[-] 简介 SolrJ/Solr 跨版本兼容性 示例代码 参考 简介 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询Solr索引的JAVA接口.SolrJ针对Solr提供了Rest

【Solr专题之九】SolrJ教程

一.SolrJ基础 1.相关资料 API:http://lucene.apache.org/solr/4_9_0/solr-solrj/ apache_solr_ref_guide_4.9.pdf:Client APIs---Using SolrJ http://wiki.apache.org/solr/Solrj solr in action:Using the SolrJ client library to add documents from Java, Using SolrJ from

HBase协处理器同步二级索引到Solr

一. 背景二. 什么是HBase的协处理器三. HBase协处理器同步数据到Solr四. 添加协处理器五. 测试六. 协处理器动态加载 一. 背景 在实际生产中,HBase往往不能满足多维度分析,我们能想到的办法就是通过创建HBase数据的二级索引来快速获取rowkey,从而得到想要的数据.目前比较流行的二级索引解决方案有Lily HBase Indexer,Phoenix自带的二级索引,华为Indexer,以及360的二级索引方案.上面的目前使用比较广泛的应该是Lily HBase Index