DataImportHandler Solr数据导入DIH使用

DataImportHandler

Solr数据导入DIH使用

概述

 

目标

1、  读驻留在关系数据库中的数据

2、  根据多个表的列和数据建立solr文档

3、  根据这些文档更新solr

4、  提供根据配置做处理

5、  删除,修改,增加做增量导入

6、  定期的增量导入和全量导入

7、  通过配置文件读取xml,(http/ftp)建立索引

8、  提供插件使得其他任何数据源(FTPSCP等)和其他格式的用户选择(JSONCSV等)提供支持。

 

设计概要

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 columnsxml字段等

c)         怎么执行(修改/添加/删除

 

使用关系数据库管理系统

 

为了使用这个处理程序,下面的步骤是必需的。

1、定义一个data-config.xml文件,并且在solrconf.xmlDataImportHandler的节点下指定位置。

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类型,都将从solrschemal.xml中寻找。

 

为了从数据库中获取数据,我们的设计理念,围绕模板化的SQL '为每个实体的用户。

 

参考网址

http://wiki.apache.org/solr/DataImportHandler

 

 

猜你喜欢

转载自501565246-qq-com.iteye.com/blog/2075282