热门标签 | 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按钮,进行默认查询,获得所有内容中包含“干净”这个词的新闻,如图所示:
    这里写图片描述

推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Win10下游戏不能全屏的解决方法及兼容游戏列表
    本文介绍了Win10下游戏不能全屏的解决方法,包括修改注册表默认值和查看兼容游戏列表。同时提供了部分已经支持Win10的热门游戏列表,帮助玩家解决游戏不能全屏的问题。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
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社区 版权所有