【转】Solr从数据库导入数据(DIH)

  本文转自:http://blog.csdn.net/xiaoyu714543065/article/details/11849115

一. 数据导入(DataImportHandler-DIH)

DIH 是solr 提供的一种针对数据库、xml/HTTP、富文本对象导入到solr 索引库的工具包。这里只针对数据库做介绍。

A、准备以下jar包

apache-solr-dataimporthandler-4.0.0.jar

apache-solr-dataimporthandler-extras-4.0.0.jar

apache-solr-dataimportscheduler-1.1.jar(增量导入使用)

数据库对应的jdbc驱动包这里使用的是Oracle oracle10g.ja放入Tomcat6.0.36/webapps/sol/WEB-INF/lib 中

B、配置solrconfig.xml

在solrconfig.xml中加入如下配置:

<requestHandlername=”/dataimport” class=”org.apache.solr.handler.dataimport.DataImportHandler”>

<lst name=”defaults”>

<str name=”config”>xx-data-config.xml</str>

</lst>

</requestHandler>

C、配置数据源

在与solrconfig.xml文件同级的目录中建立上述配置中的xx-data-config.xml文件,配置如下

query属性为全导入的时候使用。其他为增量导入使用。

<?xml version=”1.0″ encoding=”UTF-8″ ?>

<dataConfig>

<dataSource type=”JdbcDataSource”

driver=”oracle.jdbc.driver.OracleDriver”

url=”jdbc:oracle:thin:@192.168.0.129:1521:orcl”

user=”username”

password=”password”/>

<document>

<entity name=”business_info” pk=”ID”

query=”select t.ID id,business_name,bussiness_type from business t”

deltaImportQuery=”select t.ID id,business_name,bussiness_type from business t where id=’${dataimporter.delta.ID}’”

deltaQuery=”select t.ID id,business_name,bussiness_type from business t where  to_char(updatetime,’yyyy-mm-dd hh24:mi:ss’)> ’${dataimporter.last_index_time}’”>

<field column=”ID” name=”id”/>

</entity>

</document>

</dataConfig>

至此所有DIH的配置完成,在浏览器中输入命令:

全导入:

http://localhost:8085/solr/core0/dataimport?command=full-import&commit=ture

增量导入:

http://localhost:8085/solr/core0/dataimport?command=delta-import&clean=false&commit=ture

查看导入状态

http://localhost:8085/solr/core0/dataimport?command=status

D、处理CLOB字段

<entity name=”meta” query=”select id,filename,content,bytes from documents” transformer=”ClobTransformer”>

<field column=”ID” name=”id” />

<field column=”CONTENT” name=”CONTENT” clob=”true” />

</entity>

ClOB 字段的 column 必须大写!!

E、DIH内存溢出错误

在使用DIH时,容易报内存溢出错误。可以通过设置jvm大小来解决。设置方法如下:

在tomcat\bin\startup.bat 加入SET JAVA_OPTS=-Xms128m -Xmx1024m 配置 这里设置的是1024M,根据情况可以适量增大

F、自动全导入和自动增量导入

此功能可以自己写程序实现,也可利用apache-solr-dataimportscheduler-1.0.jar包完成此功能。配置如下:

修改solr.war中WEB-INF/web.xml, 在servlet节点前面增加:

<listener>
<listener-class>
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
</listener-class>
</listener>

将apache-solr-dataimportscheduler-.jar 中 dataimport.properties 取出并根据实际情况修改,然后放到 solr.home/conf (不是solr.home/core/conf) 目录下面

具体配置可参考:http://code.google.com/p/solr-dataimport-scheduler/

时间: 2024-12-22 20:58:13

【转】Solr从数据库导入数据(DIH)的相关文章

SQL从其他服务器数据库导入数据到本地数据库中

EXEC sp_dropserver 'ITSV2', 'droplogins' exec sp_addlinkedserver 'ITSV2' , '' , 'SQLOLEDB' , '168.9.123.123' exec sp_addlinkedsrvlogin 'ITSV2' , 'false' , null , 'sa' , 'sa' drop table test2; select top 12 * into test2 from ITSV2.InfoDB.dbo.city sele

SQL*Loader 从文本文件向数据库导入数据

之前我的一遍 blog 写了怎样使用 Toad 这个工具从 excel 或者 csv 文件向数据库导入数据. 其实 Oracle 自己提供了这样一个工具, 叫做 SQL*Loader. 这个工具使用起来没有那么直接, 也比较容易出错, 但是它非常适合导入大数据量的文本. 执行效率非常高, 号称一小时能导入100 G (听说). 这里给出一个简单的例子, 怎么去使用它. 比方说, 有个客户想要从他之前使用的 ERP 软件里面, 把数据导入到 Oracle 的 EBS. 当然他不可能直接表对表的复制

向orale数据库导入数据的时候报 ORA-01658

问题描述:在向orale数据库导入数据的时候报 ORA-01658: 无法为表空间 XXX中的段创建 INITIAL 区错误. 这是由于表空间对应的数据文件中数据量超过Oracle在创建表空间的时候数据文件初始化大小值,当数据量达到这个值,再向数据库中导入数据就会报错. 解决办法:解决办法就是扩展表空间,可以选择将表容量扩大,比如扩展到5000MB,或者当表空间不够时每次自动增加一定的容量,如每次自增200M. -- 查询当前数据库中表空间是否为自动扩展 select tablespace_na

solr入门:导入数据

一.连接MySql MySQL java connector 下载地址,下载后放于solr运行库中. cp /tmp/mysql-connector-java-5.1.30.jar /usr/share/tomcat6/webapps/solr/WEB-INF/lib/ 打开并编辑solr配置文件{solr/home}: vim /home/solr-index/collection1/conf/solrconfig.xml 增加以下内容(建议加在requestHandler区域后,方便管理.)

solr8.0 从数据库导入数据(三)

第一步:导入相关包: 在创建的核心目录下新建lib文件夹(如果有,无需建立),从Solr源码包的dist文件夹中导入两个solr-dataimporthandler包,以及一个mysql驱动包. 第二步:编辑下边路径中的solrconfig文件(mycore1为自己所创建的核心文件夹): 在文件末尾添加以下内容 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.Dat

如何实现MindManager数据库导入数据连接

思维导图有时候也是需要数据来进行补充支持,对于MindManager思维导图来说,与数据库的链接使得功能更为强大,那么在MindManager数据库中又是如何导入数据呢. 一个数据库连接到数据源(Mindjet的CSV文件的数据库或文件夹).您可以浏览数据源和你的导图来进行内容的添加. 添加数据库连接后,在打开的窗口中,选择连接类型,你可以连接到下面的数据库类型: 微软Access 微软Excel 微软SQL服务器 MySQL服务器 逗号分隔值(CSV文件的文件夹中的每个文件作为一个表) 而且您

批量往数据库导入数据遇到的问题总结

项目开发中,有个功能需要往数据库批量插入数据,刚开始没考虑那么多,就一条一条数据循环插入数据库,数据量少的时候,效率还可以,但是当数据量达到上千甚至几百时,这个方法效率就不行了,得等段时间才全部插入成功,用户体验度非常不好,果断pass掉该方法. 接着换令一种方法,那就是拼接insert字符串,即"Insert into TableName Values(' ',' ',' '),(' ',' ',' ');",刚开始还比较happy,插入速度很快,效率很高,可是当数据过千后,问题出现

在C#应用程序中,利用表值参数过滤重复,批量向数据库导入数据,并且返回重复数据

在很多情况下,应用程序都需要实现excel数据导入功能,数据如果只有几十条,或上百条,甚至上千条,速度还好. 但是不仅如此,如果客户提供给你的excel本身存在着重复数据,或是excel中的某些数据已经在数据库存在,那这时,在向数据库插入数据前你还得判重,如果不存在才进行导入 通常,我们第一步就会通过上传的方式把excel中的数据读到内存,然后通过循环的方式得出一条一条数据,接着对于每条数据用关键字段去往数据库中进行一次查重,若存在则不做事情,若 不存在则向数据库中插入一条数据.这样一来,我们每

solr6.6.2学习记录之三:从sqlserver数据库导入数据(全量导入)

1.配置准备 前提已经配置好了solr,并新创建了一个core;(我的是:D:\solr_home\core_demo) sqlserver数据库 ,  以数据库:demo_solr ,单表(demo_user)为例. 2.修改sorlconfig.xml sorlconfig.xml 位置: D:\solr_home\core_demo\conf ; 在 soreconfig.xml 的<requestHandler name="/select" class="sol