原文:https://blog.csdn.net/leroy008/article/details/17437437
Solr提供了full-import和delta-import两种导入方式
多个entity,每个entity有各自的last_index_time,可以通过dataimporter.entityname.last_index_time来取各自的最后更新时间来进行增量更新。
多个entity时,进行full-import时指明导入某个entity,http://localhost:8088/solr-platform/zbs-core/dataimport?entity=zcx&command=full-import.会把之前创建的索引通通删除(包括其他ENTITY创建的索引)重新建,这是要注意的地方.我开始以为是只删除当前entity的所有索引再重新full-import,结果不是这样的,加上参数clean = false;但也会删除相同id的(在 scheam.xml 的uniqueKey 声明的)
所谓delta-import主要是对于数据库(也可能是文件等等)中增加或者被修改的字段进行导入。主要原理是利用率每次我们进行import的时候在solr.home\conf下面生成的dataimport.properties文件,此文件里面有最近一次导入的相关信息。这个文件如下:
1. #Wed Apr 21 16:48:27 CST 2010
2. last_index_time=2010-04-21 16\:48\:24
3. id.last_index_time=2010-04-21 16\:48\:24
其实last_index_time是最近一次索引(full-import或者delta-import)的时间。
通过比较这个时间和我们数据库表中的timestamp列即可得出哪些是之后修改或者添加的。
可通过http://<host>:<port>/solr/dataimport查看
下面是操作步骤:
1. 配置好请求处理器。(这个见我的上一篇文章)
2. 修改data-config.xml如下:
- <dataConfig>
- <dataSource type="JdbcDataSource"
- driver="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/workshop"
- user="root"
- password="123"
- batchSize="100"
- autoCommit="false" />
- <document>
- <entity name="id"
- query="SELECT id,`user`,title,content,`timestamp`,`text` FROM article"
- deltaImportQuery="SELECT id,`user`,title,content,`timestamp`,`text` FROM article where id='${dataimporter.delta.id}'"
- deltaQuery="select id from article where `timestamp` > '${dataimporter.last_index_time}'">
- </entity>
- </document>
- lt;/dataConfig>
注意entity标签的参数:
l deltaImportQuery
仅适用于delta-import的参数。DIH会检查数据库中的最后修改时间是否与我们
这个示例为了尽可能简单,没有使用多表。数据库对应表结构如下:
id Integer increment
user varchar(45)
title varchar(45)
content varchar(2000)
timestamp datatime
text varchar(2000)
在schema.xml增加相应的字段,相同可以抽出,需要使用分词的则把type指向分词类型。(type="textComplex")
3. 最后我们请求:
http://<host>:<port>/solr/dataimport?command=delta-import 即可完成delta import
相关参数如下:
n entity
entity是document下面的标签(data-config.xml)。使用这个参数可以有选择的执行一个或多个entity 。使用多个entity参数可以使得多个entity同时运行。如果不选择此参数那么所有的都会被运行。
n clean
选择是否要在索引开始构建之前删除之前的索引,默认为true
n commit
选择是否在索引完成之后提交。默认为true
n optimize
是否在索引完成之后对索引进行优化。默认为true
n debug
是否以调试模式运行,适用于交互式开发(interactive development mode)之中。
请注意,如果以调试模式运行,那么默认不会自动提交,请加参数“commit=true”
所有命令如下
- public static final String FULL_IMPORT_CMD = "full-import";
- public static final String IMPORT_CMD = "import";
- public static final String DELTA_IMPORT_CMD = "delta-import";
- public static final String ABORT_CMD = "abort";
- public static final String DEBUG_MODE = "debug";
- public static final String RELOAD_CONF_CMD = "reload-config";
- public static final String SHOW_CONF_CMD = "show-config";
请求格式如下
http://localhost:8080/solr/dataimport?command=full-import
参考:
http://blog.csdn.net/xiao_jun_0820/article/details/7997411
http://forchenyun.iteye.com/blog/649660