美文网首页
Sor基础(下) - 通过数据库数据索引

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

作者: Vekaco | 来源:发表于2019-02-16 14:58 被阅读0次
5.从MySQL数据库导入数据至solr

关系型数据库:以MySQL为例

  1. 请参照其他教程搭建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);
  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. 依次通过以下命令建立我们的测试数据。
  • 切换到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" }
  1. 依赖包以及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。

  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"/>

相关文章

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

    5.从MySQL数据库导入数据至solr 关系型数据库:以MySQL为例 请参照其他教程搭建MySQL数据库环境,...

  • AndoridSQLite数据库开发基础教程(8)

    AndoridSQLite数据库开发基础教程(8) 添加索引 索引是一种通过预先排序和对表的一个或多个列构建索引表...

  • 聚集索引与非聚集索引

    1. 简介 数据库表主键 就是聚集索引,通过聚集索引,可以得到表的一整行数据;非聚集索引,是指数据库表的普通索引,...

  • 数据库面试题

    数据库基础(面试常见题) 一、数据库基础 Oracle对象有哪些? 答案:表,表空间,用户,视图,索引,存储过程,...

  • 数据库存储原理特性索引优化

    说一下mysql数据库存储的原理? 事务的特性? 数据库索引 数据库怎么优化查询效率? 数据库优化方案 优化索引、...

  • sql--数据库索引

    2018-10-08 数据库索引 索引的优点:通过创建唯一索引,可以保证数据库表中每行数据的唯一性可以加快查询速度...

  • 数据库索引

    索引是用来迅速定位并且找到特定的数据集。 如果没有索引, 数据库会从头遍历整个表, 采用索引的情况下, 数据库可以...

  • MongoDB 索引和 explain 的使用

    索引基础 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快。MongoDB 的索引...

  • 如何通过索引提高数据库检索的效率

    如何通过索引提高数据库检索的效率 这是前几天同事做的技术分析,讲的挺不错,现在整理一下 本文中数据库操作与数据库工...

  • Python--pandas-数据选取loc、iloc、ix函数

    基础概述 loc:通过行标签索引数据,例如取index为a的行;location的缩写iloc:通过行号索引行数据...

网友评论

      本文标题:Sor基础(下) - 通过数据库数据索引

      本文链接:https://www.haomeiwen.com/subject/mcwbeqtx.html