热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux+Solr+Zookeeper-05:通过DataImport功能手动导入MySql的数据至Solr数据库

[超级连接:Linux+Solr+Zookeeper系列-序章]本章以新闻搜索为例,对Solr开发进行记录,主要涉及以下两方面的知识:如何通过修改配置文件完成Solr的

[超级连接:Linux+Solr+Zookeeper系列-序章]


本章以新闻搜索为例,对Solr开发进行记录,主要涉及以下两方面的知识:

  • 如何通过修改配置文件完成Solr的Configsets的配置。
  • 如何通过dataimport功能将MySql数据库中的数据导入到Solr数据库中。

1.场景说明

整体目标: 通过Solr Admin后台查询功能,查询出天气预报的相关新闻。

MySql表结构:

use exam;
drop table if exists news;

create table `news`( `id` int(5) unsigned not null auto_increment comment '新闻id', `title` varchar(20) not null comment '标题', `article` text comment '新闻内容', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '', `valid` varchar(1) not null default '1' comment '是否有效', primary key(id) )engine=InnoDB comment='新闻' auto_increment=100000 default charset=utf8;



insert into news(title,article) values('北京4月1日天气预报','今天天气不好,会下大雨,而且有大风,粉尘严重。');
insert into news(title,article) values('天津4月1日天气预报','今天天气很好,暖风和煦,空气干净。');
insert into news(title,article) values('重庆4月1日天气预报','今天天气一般,空气质量一般,下午阴天。');
insert into news(title,article) values('北京4月2日天气预报','今天天气很好,暖风和煦,空气干净。');
insert into news(title,article) values('天津4月2日天气预报','今天天气一般,空气质量一般,下午阴天。');
insert into news(title,article) values('重庆4月2日天气预报','今天天气不好,会下大雨,而且有大风,粉尘严重。');
insert into news(title,article) values('北京4月3日天气预报','今天天气一般,空气质量一般,下午阴天。');
insert into news(title,article) values('天津4月3日天气预报','今天天气不好,会下大雨,而且有大风,粉尘严重。');
insert into news(title,article) values('重庆4月3日天气预报','今天天气很好,暖风和煦,空气干净。');

select * from news;
select * from news where valid = '1';

注意:

  • 为了实现增量数据导入,一定要在表结构中添加数据修改时间戳的相应字段,例如:update_time
  • 为了实现逻辑删除数据的增量处理,一定要在表结构中添加能够标识逻辑删除的字段,例如:valid

Solr Document结构:

{
    "id":"新闻id",
    "title":"新闻标题",
    "article":"新闻内容"//支持分词检索 }

2.配置新闻的Configsets

1.新建配置集:拷贝并重命名Solr内置的基础配置集basic_configs,形成新闻的配置集news_configs

sudo cp -r /usr/local/solrcloud/solr1/server/solr/configsets/basic_configs/ /usr/local/solrcloud/solr1/server/solr/configsets/news_configs

news_configs配置集包含了新闻集合类型的所有配置文件。


2.新建数据源:在news_configs/conf目录下新增news-data-config.xml文件。

sudo vim /usr/local/solrcloud/solr1/server/solr/configsets/news_configs/conf/news-data-config.xml

news-data-config.xml中添加以下内容:

<dataConfig>
        
        <dataSource name="news_db" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://130.10.8.100:3306/exam" user="root" password="1qaz@WSX"/>
        
        <document>
                
                <entity dataSource="news_db" name="news" query="select id,title,article from news where valid = '1'" deltaQuery="select id from news where update_time > '${dataimporter.last_index_time}'" deletedPkQuery="select id from news where valid = '0'" deltaImportQuery="select id,title,article from news where id='${dih.delta.id}'">
                        
                        <field column="id" name="id"/>
                        <field column="title" name="title"/>
                        <field column="article" name="article"/>
                entity>
        document>
dataConfig>

news-data-config.xml包含了Solr的数据导入dataimport功能的数据源信息,下面对几个重要标签进行简单的说明:

  • dataSource:数据源配置
    • name:数据库连接别名
    • type:数据源类型
  • entity:数据库实体配置
    • dataSource:数据库连接别名
    • name:表名
    • query:全量导入(full-import)的查询语句
    • deltaQuery:增量数据的主键的查询语句
    • deletedPkQuery:删除数据的主键的查询语句
    • deltaImportQuery:增量导入(delta-import)的查询语句
  • field:字段配置
    • column:数据库字段名
    • name:solr字段名

注意:

  • 可以使用select * from table_name来获取所有字段,而不是每个字段都罗列出来。
  • 如果field配置的columnname相同,可以不必配置此字段。

3.配置Solr字段:编辑managed-schema文件。

sudo vim /usr/local/solrcloud/solr1/server/solr/configsets/news_configs/conf/managed-schema 

找到field name="id"这一段配置,在其下添加如下配置:

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />


<field name="title" type="string" indexed="true" stored="true"/>
<field name="article" type="text_general" indexed="true" stored="true"/>

对上述配置进行简单讲解:

  • name="title"name属性即Solr的字段名,一定要与news-data-config.xml的相关配置一一对应。
  • type="string"type属性即字段类型,其中string类型的字段为精确检索,text_general类型的字段为solr自带的分词检索
  • indexed="true":标识此字段可以被搜索
  • stored="true":标识可以在搜索结果中看到此结果

4.加载数据源:修改solrconfig.xml文件,将news-data-config.xml加载到dataimport相关配置上。

sudo vim /usr/local/solrcloud/solr1/server/solr/configsets/news_configs/conf/solrconfig.xml 

找到requestHandler name="/select"所在行代码,在其上添加如下内容:

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

  <requestHandler name="/select" class="solr.SearchHandler">

注意:如果已有requestHandler name="/dataimport"的相关配置,则不用再添加。只是需要注意将news-data-config.xml添加到配置中即可。


5.添加数据驱动jar包

下载MySql的驱动jar包:https://dev.mysql.com/downloads/connector/j/

解压并拷贝jar包至solr/server/solr-webapp/webapp/WEB-INF/lib/目录下:

cp mysql-connector-java-5.1.46.jar /usr/local/solrcloud/solr1/server/solr-webapp/webapp/WEB-INF/lib/

注意:如果是SolrCloud模式,则每个节点的相应目录都需要拷贝这些jar包。


6.添加数据导入jar包

如果使用Solr Admin的后台dataimport功能,则需要添加相应jar包:

cp /usr/local/solrcloud/solr1/dist/solr-dataimporthandler-6.6.0.jar /usr/local/solrcloud/solr1/server/solr-webapp/webapp/WEB-INF/lib/
cp /usr/local/solrcloud/solr1/dist/solr-dataimporthandler-extras-6.6.0.jar /usr/local/solrcloud/solr1/server/solr-webapp/webapp/WEB-INF/lib/

cp /usr/local/solrcloud/solr2/dist/solr-dataimporthandler-6.6.0.jar /usr/local/solrcloud/solr2/server/solr-webapp/webapp/WEB-INF/lib/
cp /usr/local/solrcloud/solr2/dist/solr-dataimporthandler-extras-6.6.0.jar /usr/local/solrcloud/solr2/server/solr-webapp/webapp/WEB-INF/lib/

cp /usr/local/solrcloud/solr3/dist/solr-dataimporthandler-6.6.0.jar /usr/local/solrcloud/solr3/server/solr-webapp/webapp/WEB-INF/lib/
cp /usr/local/solrcloud/solr3/dist/solr-dataimporthandler-extras-6.6.0.jar /usr/local/solrcloud/solr3/server/solr-webapp/webapp/WEB-INF/lib/

注意:

  • 如果是SolrCloud模式,则每个节点的相应目录都需要拷贝这些jar包。
  • 其实还有不拷贝jar包的配置方式,这里就不再赘述了。

7.上传配置
通过Solr字段的zookeeper脚本进行上传。

/usr/local/solrcloud/solr1/server/scripts/cloud-scripts/zkcli.sh --cmd upconfig -confdir /usr/local/solrcloud/solr1/server/solr/configsets/news_configs/conf -confname news -z 192.168.71.128:2181,192.168.71.128:2182,192.168.71.128:2183

下面对命令参数进行简单说明:

  • zkcli.sh:solr自带的zookeeper上传脚本
  • --cmd upconfig:表示这条命令用于 上传配置
  • -confdir /usr/local/.....:表示配置目录所在
  • -collection news:表示collection的名称
  • -confname news:表示配置的配置名
  • -z192.168.71.128:2181,192.168.71.128:2182,192.168.71.128:2183:表示zookeeper服务地址

8.重启服务

/usr/local/solrcloud/solr1/bin/solr restart -c -p 8983 -z 192.168.71.128:2181,192.168.71.128:2182,192.168.71.128:2183

9.添加collection

进入Solr Admin后台,点击Collections菜单,进入Collection添加页面:
这里写图片描述

点击Add Collection按钮,输入配置,点击保存,完成新闻Collection的创建。
这里写图片描述

下面对collection的配置进行简单说明:

  • name:集合名。
  • config set:配置集,即前面章节我们上传的news_configs,我们给它命名为news
  • numShards:逻辑分片数量。
  • replicationFactor:每个逻辑分片的副本数量。
  • maxShardsPerNode:每个节点允许的最大逻辑分片数量。

10.查看collection的逻辑架构

点击Solr Admin左侧的Cloud菜单,即可看到我们刚刚添加的news的逻辑架构:
这里写图片描述


3.数据导入与查询

3.1.全量数据导入

全量数据导入的操作流程:

  • 点击Solr Admin左侧的Collection Selector,下拉选择news
  • 点击新展现的子菜单的DataImport按钮,进入数据导入页面。
  • 选择Command模式为full-import,即全量导入。
  • 点击Execute按钮,开始数据导入。
  • 稍等片刻,点击Refresh Status按钮,右侧会显示导入结果,结果如下:
    这里写图片描述

从图中可知,我们这次导入了9条记录。

3.2.默认查询

  • 点击左侧的Query按钮,进入查询页面。
  • 点击Execute Query按钮,进行默认查询,获得刚才导入的数据,如图所示:
    这里写图片描述

3.3.增量导入

执行SQL语句,对一条数据进行修改:

update news set title='重庆4月14日天气预报' where id='100008';

增量数据导入的操作流程:

  • 点击Solr Admin左侧的Collection Selector,下拉选择news
  • 点击子菜单的DataImport按钮,进入数据导入页面。
  • 选择Command模式为delta-import,即增量导入。
  • 注意取消勾选Clean选项,即不清除之前的数据。
  • 点击Execute按钮,开始数据导入。
  • 稍等片刻,点击Refresh Status按钮,右侧会显示导入结果,结果如下:
    这里写图片描述

3.4.模糊查询

  • 点击左侧的Query按钮,进入查询页面。
  • q输入域内输入article:干净
  • 点击Execute Query按钮,进行默认查询,获得所有内容中包含“干净”这个词的新闻,如图所示:
    这里写图片描述

推荐阅读
author-avatar
long--Journey
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有