Sor基础(下) - 通过数据库数据索引

2019-02-16  本文已影响0人  Vekaco
5.从MySQL数据库导入数据至solr

关系型数据库:以MySQL为例

  1. 请参照其他教程搭建MySQL数据库环境,并执行以下sql创建测试数据。
create database solr;
use solr;
create table user(id bigint primary key, user_name varchar(60), sex bit, birth date, salary int);
insert into user (id, user_name, sex, birth, salary) values(1,'user1',1,'1992-04-12',5000);
  1. 导入依赖包
    请在core对应的lib目录中导入以下三个依赖包,包括mysql驱动包(可在mysql官网下载,注意其jdk版本)和dataimport依赖包。


    依赖包
  2. 配置data-config.xml

<dataConfig>
  <dataSource name="jdbcDataSource" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solr?useUnicode=true&amp;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语句;
  1. 修改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"/>
  1. 配置完成之后,在Solr Web控制台dataimport下执行操作即可导入数据。
6.从MongoDB导入数据到Solr
  1. 关于MongoDB的开发环境这里不过多的进行阐述,可以自行参考其他教程到MongoDB官网下载安装配置。以下使用MongoDB-3.2.22-releases版本进行演示。
  2. 首先通过mongod命令启动MongoDB服务器,随后另起命令行窗口通过mongo命令连接到默认test库。
  3. 依次通过以下命令建立我们的测试数据。
> use admin
switched to db admin
> db.createUser(
... {user:"yida",
... pwd:"123",
... roles:["readWrite","dbAdmin"]
... }
... );
Successfully added user: { "user" : "yida", "roles" : [ "readWrite", "dbAdmin" ]}
 > use solr-test;
switched to db 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"
                }
        ]
}
> db.createCollection("book",{size:1000,capped:true,max:2000});
{ "ok" : 1 }
> 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" }
  1. 依赖包以及dataimport扩展包,将以下两个依赖包下载并拷贝到本地core的lib目录下;

注意:由于扩展dataimport依赖的版本较低需要使用mongo驱动中已过时的com.mongodb.DB.authenticate方法,这边我们采用的驱动版本为2.13.0。

  1. 接下来就是配置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不一致的情况;
  1. 更新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"/>
上一篇 下一篇

猜你喜欢

热点阅读