DataImportHandler
Solr数据导入DIH使用
概述
目标
1、 读驻留在关系数据库中的数据
2、 根据多个表的列和数据建立solr文档
3、 根据这些文档更新solr
4、 提供根据配置做处理
5、 删除,修改,增加做增量导入
6、 定期的增量导入和全量导入
7、 通过配置文件读取xml,(http/ftp)建立索引
8、 提供插件使得其他任何数据源(FTP,SCP等)和其他格式的用户选择(JSON,CSV等)提供支持。
设计概要
Handler应该配置到solrconfig.xml中,如下面
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">/home/username/data-config.xml</str>
</lst>
</requestHandler>
故名思想,这个类实现了SolrRequestHandler(SolrRequestHandler使用.doc),配置在两个地方提供:
1、solrconfig.xml, 数据配置文件的位置添加在这里
2、数据源也可以添加在这里。或者配置在data-config.xml中
3、Data-config.xml
a) 如何获取数据(queries,url等)
b) 怎么读取( resultset columns,xml字段等)
c) 怎么执行(修改/添加/删除)
使用关系数据库管理系统
为了使用这个处理程序,下面的步骤是必需的。
1、定义一个data-config.xml文件,并且在solrconf.xml中DataImportHandler的节点下指定位置。
2、给连接信息,(如果你选择把数据源存储在solrconfig.xml中)
3、如果一切正常,HTTP打开dataimporthandler页面来验证 ,http://localhost:8983/solr/dataimport
4、使用全量导入,将会把数据库中所有数据添加到solr索引中。
5、使用增量导入,将会把数据库中(新增的或修改的)数据添加到solr索引中。
配置数据源
在dataConfig标签下添加一个dataSource标签。
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/dbname" user="db_username" password="db_password"/>
1、 dataSource配置也可以被添加到solrconfig.xml 中
2、属性”type”指定实现类,它是可选的。默认值是“jdbcdatasource”
3、属性名称,可以在多个实体使用多个数据源的应用
4、自定义插件的实现【solr数据库导入数据自定义插件的实现.doc】
Oracle例子
首先,需要下载oracle 的jdbc驱动到你 solr安装目录的lib下面。
<dataSource name="jdbc" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@//hostname:port/SID" user="db_username" password="db_password"/>
多数据源
可以配置有多个数据源,配置一个额外的数据源,新添加一个dataSource配置即可,有一个隐含的属性“name”,数据源名称。如果有一个以上的,每一个额外的数据源必须确定一个唯一的名称的名称=“datasource-2”。
例如
<dataSource type="JdbcDataSource" name="ds-1" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db1-host/dbname" user="db_username" password="db_password"/>
<dataSource type="JdbcDataSource" name="ds-2" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db2-host/dbname" user="db_username" password="db_password"/>
在你的实体中
..
<entity name="one" dataSource="ds-1" ...>
..
</entity>
<entity name="two" dataSource="ds-2" ...>
..
</entity>
..
配置JdbcDataSource
JdbcDataSource 可使用的属性有:
· driver (必须的): The jdbc driver classname
· url (必须的) : The jdbc connection url (如果jndiName配置了,就不是必须的)
· user : 用户名
· password : 密码
· jndiName : JNDI name of the preconfigured datasource
· batchSize : The batchsize used in jdbc connection. Use a value of '-1' in case of setFetchSize() exception.
· convertType :(true/false)默认为“false”自动读取目标Solr数据类型的数据
· autoCommit : If set to 'false' it sets setAutoCommit(false) Solr1.4
· readOnly : If this is set to 'true' , it sets setReadOnly(true), setAutoCommit(true),setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED),setHoldability(CLOSE_CURSORS_AT_COMMIT) on the connection
· <!--[endif]-->transactionIsolation : The possible values are [TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED, TRANSACTION_REPEATABLE_READ,TRANSACTION_SERIALIZABLE,TRANSACTION_NONE]
任何额外的属性将标签直接传递到JDBC驱动程序。
配置data-config.xml文件
Solr的文档可以来自数据库的多个表,
Data-config.xml 开始于document 标签,一种文档代表了一个文档,文档包含一个或多个根实体。一根实体可以包含多个子实体,这反过来又可以包含其他实体。一个实体对应关系数据库中的表/视图。每个实体可以包含多个域。每个字段对应的结果集的列在实体查询返回的。每个领域,在结果集的提列名称。如果列名称不同Solr字段名称,另一个属性的名称应给予,所有的属性,比如type类型,都将从solr中schemal.xml中寻找。
为了从数据库中获取数据,我们的设计理念,围绕“模板化的SQL '为每个实体的用户。
参考网址
http://wiki.apache.org/solr/DataImportHandler