Solr DataImportHandler
大多数应用程序将数据存储在关系数据库或XML文件中,搜索这些数据是常见的操作。DataImportHandler提供了一个配置驱动的方式,将这些数据导入到Solr中。在初始化构建的时候全量抽取(full-import)数据,还可以使用增量抽取(delta-import)的方式叠加新的数据。
添加jar架包
jar架包括 solr-dataimporthandler-extras-7.2.1.jar、solr-dataimporthandler-7.2.1.jar、连接关系型数据库的JDBC驱动包,把他们添加到solr项目的WEB-INF/lib/目录下。solr-dataimporthandler两个jar包位于SOLR_ROOT/dist/ 目录下。我这里操作的环境数据库是Oracle,所以添加的是Oracle的驱动包,下面配置的数据库连接也是Oracle。
配置requestHandler
在 solrhome/${collection}/conf/solrconfig.xml 文件,添加 dataimport requestHandler。
<config>
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">/usr/local/solr/solrhome/test/conf/data-config.xml</str>
<lst name="datasource">
<str name="name">dsj</str>
<str name="driver">oracle.jdbc.driver.OracleDriver</str>
<str name="url">jdbc:oracle:thin:@ip:1521:orcl</str>
<str name="user">user</str>
<str name="password">password</str>
</lst>
</lst>
</requestHandler>
</config>
说明:数据源可以配置在solrconfig.xml ,也可以配置在data-config.xml。
配置data-config.xml
solr 是以文档为基本单位来存储和展示,data-config.xml定义着文档的元素。文档作为同类的代表,包含1个或多个根实体(root entity),实体又可包含多个子实体。实体是关系型数据库中的表或视图的映射,包含多个字段(filed)。字段的属性定义来源于solr schema。
在 solrhome/${collection}/conf/目录下,创建data-config.xml,并添加以下内容。
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<document>
<entity name="t_xdr_spsc_zsxx" pk="ID" dataSource="dsj"
query="select * from t_xdr_spsc_zsxx"
deltaImportQuery="select * from t_xdr_spsc_zsxx where ID='${dih.delta.ID}'"
deltaQuery="select ID from t_xdr_spsc_zsxx where update_time > to_date('${dih.t_xdr_spsc_zsxx.last_index_time}','yyyy-mm-dd hh24:mi:ss')"
deletedPkQuery="select ID from t_xdr_spsc_zsxx where delete_flag='1' and update_time > to_date('${dih.t_xdr_spsc_zsxx.last_index_time}','yyyy-mm-dd hh24:mi:ss')">
</entity>
</document>
</dataConfig>
entity配置说明
- name : 标识实体的唯一名称
- pk:实体的主键。非必选,用于增量导入(delta-import)。
- dataSource:配置在solrconfig.xml的dataSource名称,多数据源的时候会这么使用。示例中使用这种配置方式。
- query:必填,用全量导入(full-import)查询数据库的SQL。
- deltaQuery:用于增量导入,查询增量的主键传给deltaImportQuery使用${dih.delta.column-name}
- deltaImportQuery:增量导入查询用
- deletedPkQuery:增量删除用,根据主键来删除文档。
namespace 命名空间:提供 ${dih.delta.column-name}、${dih.entity.last_index_time}(单个实体范围)、${dih.last_index_time}(全局),在增量导入的可以使用它们来更新索引。
solrhome/${collection}/conf/dataimport.properties存储着${dih.last_index_time}、${dih.entity.last_index_time}的信息