第四章、从数据库导入数据-DataImport

这一节描述的是如何从数据库导入数据并进行搜索

1.配置dataimport

在前面core_test的配置文件/conf/solrconfig.xml中增加dataimport

  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name="config">data-config.xml</str>
    </lst>
  </requestHandler>

2.配置data-config.xml

在solrconfig.xml同一个目录下创建文件data-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource name="solrDB" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test"
 user="root" password=""/>
<document>
    <entity pk="id" dataSource="solrDB" name="nba_star" 
    query="SELECT 
			  a.id,
			  a.name,
			  a.age,
			  a.desc 
			FROM
			  nba_super_star a"
    deltaImportQuery="SELECT 
			  a.id,
			  a.name,
			  a.age,
			  a.desc 
			FROM
			  nba_super_star a
			WHERE 
			  a.id='${dataimporter.delta.id}'"
    deltaQuery="SELECT id from nba_super_star 
                      where modifier_time > '${dataimporter.last_index_time}'">
        <field column="id" name="id"/>
        <field column="name" name="name"/>
		<field column="age" name="age"/>
        <field column="desc" name="desc"/>
    </entity>
</document>
</dataConfig>

 这里主要是配置数据库连接参数,solr更新使用SQL等

如果有一个field是multiValued="true"(可能有多个值),那这个字段导入的配置可以在对应的entity中(nba_star)加上配置(假设该对应关系存储在solr_test_star_tag表中)

<entity name="sport_star_tags"
   query="select tag_text from solr_test_star_tag where star_id='${sport_stars.id}'" >
	<field column="tag_text" name="tags"/>  
</entity>

3.导入相关包到WEB-INF/lib下

一般可在solr目录的dist文件夹下可找到

solr-dataimporthandler-6.1.0.jar、solr-dataimporthandler-extras-6.1.0.jar、mysql-connector-java-5.1.34.jar

4.导入全部数据

导入全部:

http://localhost:8080/solr/core_test/dataimport?command=full-import

查看状态:

http://localhost:8080/solr/core_test/dataimport?command=status

5.查询

同上一章

附:

测试数据库表以及原始数据SQL

CREATE DATABASE `test`;
USE `test`;
DROP TABLE IF EXISTS `nba_super_star`;
CREATE TABLE `nba_super_star` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '球星ID',
  `name` varchar(40) DEFAULT NULL COMMENT '姓名',
  `age` smallint(6) DEFAULT NULL COMMENT '年龄',
  `desc` text COMMENT '简介',
  `modifier_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

insert  into `nba_super_star`(`id`,`name`,`age`,`desc`) values (1,'Michael Jordan',53,'迈克尔·乔丹,1963年2月17日生于纽约布鲁克林,司职得分后卫,历史上最伟大的篮球运动员。2009年9月11日,迈克尔·乔丹正式入选NBA篮球名人堂。'),
	(2,'LeBron James',32,'勒布朗·詹姆斯(LeBron James),绰号“皇帝”,1984年12月30日出生在美国·俄亥俄州·阿克伦,世界著名的美国男子职业篮球运动员,司职小前锋,效力于NBA克利夫兰骑士队。'),
	(3,'Stephen Curry',28,'斯蒂芬·库里(Stephen Curry),1988年3月14日出生于美国俄亥俄州阿克伦(Akron, Ohio),美国职业篮球运动员,司职控球后卫,效力于NBA金州勇士队。'),
	(4,'James Harden',27,'詹姆斯·哈登,2009年通过选秀进入NBA,司职得分后卫');

返回目录

猜你喜欢

转载自marionette.iteye.com/blog/2328993