5.从MySQL数据库导入数据至solr
关系型数据库:以MySQL为例
- 请参照其他教程搭建MySQL数据库环境,并执行以下sql创建测试数据。
- 创建solr database
create database solr;
- 在solr database中创建user表
use solr;
create table user(id bigint primary key, user_name varchar(60), sex bit, birth date, salary int);
- 往user表插入测试数据
insert into user (id, user_name, sex, birth, salary) values(1,'user1',1,'1992-04-12',5000);
-
导入依赖包
请在core对应的lib目录中导入以下三个依赖包,包括mysql驱动包(可在mysql官网下载,注意其jdk版本)和dataimport依赖包。
依赖包 -
配置data-config.xml
<dataConfig>
<dataSource name="jdbcDataSource" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solr?useUnicode=true&characterEncoding=utf-8" user="root" password="mysql"/>
<document>
<entity dataSource="jdbcDataSource" name="user" query="select * from user">
<field column="id" name="id"/>
<field column="user_name" name="userName"/>
<field column="sex" name="sex"/>
<field column="birth" name="birth"/>
<field column="salary" name="salary"/>
</entity>
</document>
</dataConfig>
DataSource元素属性
- name:表示给你的数据源起个别名,便于entity元素引用;
- type:solr内置的数据源类名;
- driver:驱动类的完整包路径;
url:即jdbc连接的url,url中不可包含以下5中特殊字符,如果已存在则需将特殊字符按照entity列转义;
特殊字符转义表- batchSize:表示JDBC从数据库一个批次提取多少条数据,以防止一个批次返回数量过大撑爆内存;
- maxRows:表示最多返回多少条记录,加入sql返回100万条记录,如果maxRows为10000,则最后只会得到10000条记录;
- convertType:接受布尔类型参数,表示是否需要制定数据库表字段的类型,如果convertType设置为type,则实体中域定义需要添加type参数,如下;
<field column="id" name="id" type="long"/>
Entity元素属性
- name:表示给你的entity起个别名;
- query:需要执行的SQL语句;
- 修改schema.xml
<field name="id" type="int" indexed="true" stored="true" required="false" multiValued="false" />
<field name="userName" type="string" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="sex" type="boolean" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="birth" type="tdate" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="salary" type="int" indexed="true" stored="true" required="false" multiValued="false"/>
- 配置完成之后,在Solr Web控制台dataimport下执行操作即可导入数据。
6.从MongoDB导入数据到Solr
- 关于MongoDB的开发环境这里不过多的进行阐述,可以自行参考其他教程到MongoDB官网下载安装配置。以下使用MongoDB-3.2.22-releases版本进行演示。
- 首先通过mongod命令启动MongoDB服务器,随后另起命令行窗口通过mongo命令连接到默认test库。
- 依次通过以下命令建立我们的测试数据。
- 切换到admin管理员数据库
> use admin
switched to db admin
- 创建管理员账号,账号:yida,密码:123
> db.createUser(
... {user:"yida",
... pwd:"123",
... roles:["readWrite","dbAdmin"]
... }
... );
Successfully added user: { "user" : "yida", "roles" : [ "readWrite", "dbAdmin" ]}
- 创建测试数据库solr-test
> use solr-test;
switched to db solr-test
- 为solr-test数据库创建一个测试账号,并为其赋予权限
> db.createUser(
... {user:"test",
... pwd:"123",
... roles:[{role:"dbOwner",db:"solr-test"}]
... }
... );
Successfully added user: {
"user" : "test",
"roles" : [
{
"role" : "dbOwner",
"db" : "solr-test"
}
]
}
- 创建name为book的 Collection
> db.createCollection("book",{size:1000,capped:true,max:2000});
{ "ok" : 1 }
- 在book Collection中插入几条数据
> db.createCollection("book",{size:1000,capped:true,max:2000});
{ "ok" : 1 }
> db.book.insert({"bookName":"Think in Java","lang":"en"});
WriteResult({ "nInserted" : 1 })
> db.book.insert({"bookName":"Head first Java","lang":"en"});
WriteResult({ "nInserted" : 1 })
> db.book.insert({"bookName":"Solr in Action","lang":"en"});
WriteResult({ "nInserted" : 1 })
> db.book.find();
{ "_id" : ObjectId("5c68ff8ffd698bb0daa84300"), "bookName" : "Think in Java", "l
ang" : "en" }
{ "_id" : ObjectId("5c68ffa3fd698bb0daa84301"), "bookName" : "Head first Java",
"lang" : "en" }
{ "_id" : ObjectId("5c68ffaffd698bb0daa84302"), "bookName" : "Solr in Action", "
lang" : "en" }
- 依赖包以及dataimport扩展包,将以下两个依赖包下载并拷贝到本地core的lib目录下;
- 获取MongoDB驱动包,可搜索“MongoDB Java Driver Maven”(注意和自己安装的Maven版本保持一致);
- solr官方没有提供NoSqlDataSouce数据源类来读取MongoDB,可以搜索“solr mongo dataimport github”或者到github来获取相关扩展源码以及jar包。
注意:由于扩展dataimport依赖的版本较低需要使用mongo驱动中已过时的com.mongodb.DB.authenticate方法,这边我们采用的驱动版本为2.13.0。
- 接下来就是配置data-config.xml,其内容如下。
<dataConfig>
<dataSource name="mongoDataSource" type="MongoDataSource" database="solr-test" host="localhost" port="27017" username="test" password="123"/>
<document>
<entity name="book" processor="MongoEntityProcessor" query="{'lang':'en'}" collection="book" dataSource="mongoDataSource" rootEntity="true" onError="skip" transformer="MongoMapperTransformer">
<field column="bookName" name="bookName" mongoField="bookName"/>
<field column="lang" name="lang"/>
</entity>
</document>
</dataConfig>
DataSource的参数属性说明
- name:表示数据源的别名;
- type:表示数据源的类名;
- database:表示你要连接的数据库名称;
- host:表示需要连接的主机地址,默认localhost;
- port:表示MongoDB监听端口号,默认27017;
- username:必需参数,表示连接的数据库账号;
- password:必需参数,表示连接的数据库密码;
entity的参数属性说明- processor:制定处理器,即MongoEntityProcessor;
- query:MongoDB的查询语法;
- collection:需要查询的Collection名称;
- dataSource:数据源
- transformer:解决MongoDb返回的结果集里的field名称跟原始collection里field不一致的情况;
- 更新schema.xml中的域定义。
<field name="bookName" type="string" indexed="true" stored="true" required="false" multiValued="false" />
<field name="lang" type="string" indexed="true" stored="true" required="false" multiValued="false"/>
网友评论