一:引言
在上一章中导入数据的方式是全量导入,如果每次导入数据都是全量导入的话,首先是没必要,其次在海量数据下对服务器的压力也较大。所以合理的方式是更新索引采用定时增量更新。
二、修改数据库
在数据库中新增一个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
三、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、资源复用:已有的硬件配置是怎样的,是否有升级计划
1、数据更新频率:每天数据增量有多大,随时更新还是定时更新
2、数据总量:数据要保存多长时间
3、一致性要求:期望多长时间内看到更新的数据,最长允许多长时间延迟
4、数据特点:数据源包括哪些,平均单条记录大小
5、业务特点:有哪些排序要求,检索条件
6、资源复用:已有的硬件配置是怎样的,是否有升级计划