原文地址:http://www.jiancool.com/article/12743229775/;jsessionid=14E9B3F1BB33399799884B5C8F15DDE1

 solr增量索引配置 
1.在进行增量索引前,首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties 
                   data-config.xml里面的数据 
  <!--  transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签   ---> 
  <!--  query:查询数据库表符合记录数据   ---> 
  <!--  deltaQuery:增量索引查询主键ID    --->    注意这个只能返回ID字段 
  <!--  deltaImportQuery:增量索引查询导入数据  ---> 
  <!--  deletedPkQuery:增量索引删除主键ID查询  ---> 注意这个只能返回ID字段 
                   数据库配置注意事项 
1.如果只涉及添加,与修改业务,那么数据库里只需额外有一个timpstamp字段 
就可以了,默认值为当前系统时间,CURRENT_TIMESTAMP(笔者的数据为mysql的) 
2.如果还涉及删除业务,那么数据里就需额外再多添加一个字段isdelete,int类型的 
用0,1来标识,此条记录是否被删除,当然也可以用其他字段标识,ture或false都可以

dataimporter.properties 
这个配置文件很重要,它是用来记录当前时间与上一次修改时间的,通过它能够找出,那些,新添加的,修改的,或删除的记录 

       下面为笔者当时测试时的一个演示,其中添加,修改,删除,都涉及了

    <dataConfig>
<!--- 此段话配置的是一个MySQL的数据源,(数据源也可以配置在solrconfig.xml中) --->
<dataSource name="mydb" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password="ninemax"/> <document>
<!-- 下面分别来介绍属性(如有错误,欢迎指出) -->
<!-- pk="ID" 这个很有必要,因为其中的增量索引查询主键ID时需要 -->
<!-- dataSource="mydb" 这个引用名字是引用上面数据源的名字 -->
<!-- name="myinfo" 这个名字必须唯一,存在多个实体时 -->
<!-- query="select * from myinfo WHERE isdelete=0 query查询是指
查询出表里所有的符合条件的数据,因为笔者测试的有删除业务,所以
where 后面有一个限定条件isdelete=0,意思为查询未被删除的数据 (注意这个query查询只对第一次全量导入有作用,对增量导入不起作用)
-->
<!--
deltaQuery="select ID from myinfo where my_date > '${dataimporter.last_index_time}'"
deltaQuery的意思是,查询出所有经过修改的记录的ID
可能是修改操作,添加操作,删除操作产生的
(此查询只对增量导入起作用,而且只能返回ID值)
-->
<!--
deletedPkQuery="select ID from myinfo where isdelete=1"
此操作值查询那些数据库里伪删除的数据的ID(即isdelete标识为1的数据)
solr通过它来删除索引里面对应的数据
(此查询只对增量导入起作用,而且只能返回ID值)
-->
<!--
deltaImportQuery="select * from myinfo where ID='${dataimporter.delta.ID}'"
次查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据
对索引库进行更新操作,可能是删除,添加,修改
(此查询只对增量导入起作用,可以返回多个字段的值,一般情况下,都是返回所有字段的列)
--> <entity pk="ID" dataSource="mydb" name="myinfo" query="select * from myinfo WHERE isdelete=0 "
deltaQuery="select ID from myinfo where my_date > '${dataimporter.last_index_time}'"
deletedPkQuery="select ID from myinfo where isdelete=1"
deltaImportQuery="select * from myinfo where ID='${dataimporter.delta.ID}'" >
<!-- 此条记录有必要说一下,ID指定大写的,与上面语句中的对应起来----> <field column="ID" name="id"/>
<field column="name" name="name"/>
<field column="address" name="address"/>
<field column="age" name="age"/>
<field column="my_date" name="my_date"/>
<field column="isdelete" name="isdelete"/>
</entity> </document> </dataConfig>

solr4.2增量索引之同步(修改,删除,新增)--转载的更多相关文章

  1. sphinx增量索引和主索引来实现索引的实时更新

    项目中文章的信息内容因为持续有新增,而文章总量的基数又比较大,所以做搜索的时候,用了主索引+增量索引这种方式来实现索引的实时更新. 实现原理: 1. 新建一张表,记录一下上一次已经创建好索引的最后一条 ...

  2. 数据源、数据集、同步任务、数据仓库、元数据、数据目录、主题、来源系统、标签、增量识别字段、修改同步、ES索引、HBase列族、元数据同步、

    数据源.数据集.同步任务.数据仓库.元数据.数据目录.主题.来源系统.标签. 增量识别字段.修改同步.ES索引.HBase列族.元数据同步.DS.ODS.DW.DM.zk集群地址 == 数据源 数据源 ...

  3. [Spring cloud 一步步实现广告系统] 15. 使用开源组件监听Binlog 实现增量索引准备

    MySQL Binlog简介 什么是binlog? 一个二进制日志,用来记录对数据发生或潜在发生更改的SQL语句,并以而进行的形式保存在磁盘中. binlog 的作用? 最主要有3个用途: 数据复制( ...

  4. [Solr] (源) Solr与MongoDB集成,实时增量索引

    一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ...

  5. Lucene.net 实现近实时搜索(NRT)和增量索引

    Lucene做站内搜索的时候经常会遇到实时搜索的应用场景,比如用户搜索的功能.实现实时搜索,最普通的做法是,添加新的document之后,调用 IndexWriter 的 Commit 方法把内存中的 ...

  6. solr与.net系列课程(六)solr定时增量索引与安全

     solr与.net系列课程(六)solr定时增量索引与安全 solr增量索引的方式,就是一个Http请求,但是这样的请求显然不能满足要求,我们需要的是一个自动的增量索引,solr官方提供了一个定时器 ...

  7. xunsearch增量索引改进版

    最近测试了xunserach全文索引程序.xunsearch只有LINUX版,所以想用windows服务器请使用其它全文索引程序.xunsearch本身不像coreseek那样自带增量索引的功能,所以 ...

  8. sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法(转)

    一.sphinx增量索引的设置    数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万 ...

  9. Solr与MongoDB集成,实时增量索引

    Solr与MongoDB集成,实时增量索引 一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中, ...

随机推荐

  1. Android开发——LinearLayout和RelativeLayout的性能对比

    0. 前言 我们都知道新建一个Android项目自动生成的Xml布局文件的根节点默认是RelativeLayout,这不是IDE默认设置,而是由android-sdk\tools\templates\ ...

  2. angular之$watch() $watchGroup()和$watchCollection()

    $watch $watch主要是用来监听一个对象,在对象发生变化时触发某个事件. 用法: $scope.$watch(watchFn,watchAction, deepWatch) 接下来讲一下这几个 ...

  3. 问题:python2.7 安装包失败,提示错误:Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat)

    问题描述: 使用pip安装包时报错,error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat) 环境: pyt ...

  4. 04-JVM内存模型:直接内存

    1.1.什么是直接内存(Derect Memory) 在内存模型最开始的章节中,我们画出了JVM的内存模型,里面并不包含直接内存,也就是说这块内存区域并不是JVM运行时数据区的一部分,但它却会被频繁的 ...

  5. [C++]C++得到最大的int值

    要得到最大的int值: 利用(unsigned int)-1,这样得到的就是unsigned int表示的最大值, int值只是比unsigned int多一位符号位,所以对(unsigned int ...

  6. 时序数据库InfluxDB

    在系统服务部署过后,线上运行服务的稳定性是系统好坏的重要体现,监控系统状态至关重要,经过调研了解,时序数据库influxDB在此方面表现优异. influxDB介绍 时间序列数据是以时间字段为每行数据 ...

  7. Teaching Machines to Understand Us 让机器理解我们 之一 引言

    Teaching Machines to Understand Us   By Tom Simonite  MIT Technology Review Vol.118 No.5 2015 让机器理解我 ...

  8. 高可用Kubernetes集群-8. 部署kube-scheduler

    十.部署kube-scheduler kube-scheduler是Kube-Master相关的3个服务之一,是有状态的服务,会修改集群的状态信息. 如果多个master节点上的相关服务同时生效,则会 ...

  9. php命名空间学习笔记。

    为什么要用命名空间? 在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题: 用户编写的代码 与  PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲 ...

  10. 0421--"数字口袋精灵app"二次开发(Blackbriar团队开发)

    "数字口袋精灵app"二次开发 目录: 一.项目github总仓库推送 二.开发成员 三.分工与合作 四.各模块成果 五.心得墙 六.团队成员贡献分 内容: 一.项目github总 ...