这一节描述的是如何从数据库导入数据并进行搜索
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,司职得分后卫');