和solr的N天N夜(四)--增量、定时导入并检索数据

原创 2016年03月17日 15:40:29

一:引言

在上一章中导入数据的方式是全量导入,如果每次导入数据都是全量导入的话,首先是没必要,其次在海量数据下对服务器的压力也较大。所以合理的方式是更新索引采用定时增量更新。

二、修改数据库

在数据库中新增一个timestamp类型的字段,并且默认值为CURRENT_TIMESTAMP
CREATE TABLE `image_info` (
  `id` varchar(32) NOT NULL,
  `src` text,
  `update_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Solr是根据新增的update_date字段来判断增量的数据。因为solr本身有一个默认值last_index_time,记录最后一次做full import或者是delta import(增量导入)的时间,这个值存储在文件conf目录的dataimport.properties文件中。

三、data-config.xml配置:

<dataConfig>  
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/dbname" user="root" password="***" />   
    <document>  
        <entity name="imageInfo" pk="id" query="select id,src,key_info from image_info"
deltaImportQuery="SELECT id,src,key_info FROM image_info where id='${dih.delta.id}'" 
deltaQuery="SELECT id FROM image_info where update_date > '${dih.last_index_time}'">  
            <field column="id" name="id"/>   
            <field column="src" name="src"/>   
            <field column="key_info" name="key_info"/>   
   <field column="update_date" name="update_date"/>   
        </entity>  
    </document>  
</dataConfig>

配置说明:
query:查询数据库表符合记录数据。
deltaQuery:增量索引查询主键ID,这个只能返回ID字段。
deltaImportQuery:增量索引查询导入的数据。

更新过程:
1:按照query指定的SQL语句查询出符合条件的记录。
2:从这些数据中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID。
3:deltaImportQuery指定的SQL语句返回所有这些ID的数据,即为这次增量导入所要处理的数据。

核心思想:通过内置变量“${dih.delta.id}”和 “${dih.last_index_time}”来记录本次要索引的id和最近一次索引的时间。如果update_date的时间大于配置文件中记录的最后一次更新时间,则该条记录为增量数据。

四、测试

新增一条数据之后,访问http://localhost:8080/solr/dataimport?command=delta-import即可查询到新增的数据。

五、设置增量导入索引数据为定时任务

1):solr本身提供了定时导入索引功能。

导入solr-dataimportscheduler-1.1.jar到solr工程下lib目录中。注意:如果此处导入的是apache-solr-dataimportscheduler-1.0.jar,在导入索引库的时候,会导入失败(unsupported media type错误)
由于dataimportscheduler已经很久没有维护,为solr版本一直在更新。所以在进行定时任务会报错。具体内容看下图:


从这里就可以看出下面的dataimport.proterties为什么要放到solrhome目录下,而不是solrhome/core/conf目录。

2):修改web.xml

添加定时任务监听器。
<listener>    
<listener-class>    
            org.apache.solr.handler.dataimport.scheduler.ApplicationListener    
</listener-class>    
</listener>   

3):新建配置文件dataimport.properties

在solrhome目录下面新建一个目录conf(注意不是solrhomecollection1下面的conf),然后用解压文件打开apache-solr-dataimportscheduler-1.0.jar文件,将里面的dataimport.properties文件拷贝过来,进行修改。(solr-dataimportscheduler-1.1.jar中没有改配置文件)下面是最终我的自动定时更新配置文件内容:

启动tomcat,在控制台查看输出日志就可以看到更新索引库。
一般来说要在你的项目中引入Solr需要考虑以下几点:
1、数据更新频率:每天数据增量有多大,随时更新还是定时更新
2、数据总量:数据要保存多长时间
3、一致性要求:期望多长时间内看到更新的数据,最长允许多长时间延迟
4、数据特点:数据源包括哪些,平均单条记录大小
5、业务特点:有哪些排序要求,检索条件
6、资源复用:已有的硬件配置是怎样的,是否有升级计划


版权声明:本文为博主原创文章,未经博主允许不得转载。

solr5.5定时增量apache-solr-dataimportscheduler

  • 2016年04月09日 19:12
  • 10KB
  • 下载

apache-solr-dataimportscheduler

  • 2017年03月29日 15:23
  • 13KB
  • 下载

solr 定时全量索引 增量索引与dataimporter.properties 配置

solr增量索引配置  1.在进行增量索引前,首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties    data-config.xml里面的数据  ...
  • A__java___A
  • A__java___A
  • 2014年03月31日 19:19
  • 13286

solr定时实时重建索引和增量更新

Solr Data Import Hander Scheduler 说明:         Solr官方提供了很强大的Data Import Request Handler,同时提供了一个简单的 Sc...
  • zwx19921215
  • zwx19921215
  • 2015年01月26日 14:40
  • 32018

20161218-solr cloud 定时刷新数据 先开个坑已填

先开个坑
  • yehuang_0801
  • yehuang_0801
  • 2016年12月16日 16:34
  • 1244

solr6.6定时实时重建索引和增量更新

1. 将 apache-solr-dataimportscheduler-1.1.jar 和solr自带的 apache-solr-dataimporthandler-5.1.0.jar, apach...
  • sinat_21184471
  • sinat_21184471
  • 2017年08月15日 15:23
  • 1492

apache-solr-dataimportscheduler-1.0.jar

  • 2017年08月25日 09:20
  • 11KB
  • 下载

apache-solr-dataimportscheduler-1.0

  • 2014年07月29日 10:31
  • 11KB
  • 下载

solr定时任务dataimport报错解决

在做solr的dataimport的定时任务时,启动时报了如下的错误,一直搞不明白,最后发现是引的包有问题(apache-solr-dataimportscheduler-1.0.jar) 08-D...
  • zllovewyh890128
  • zllovewyh890128
  • 2016年12月08日 11:58
  • 1744

apache-solr-dataimportscheduler.jar

  • 2014年10月31日 09:38
  • 10KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:和solr的N天N夜(四)--增量、定时导入并检索数据
举报原因:
原因补充:

(最多只允许输入30个字)