搭建solr8.2全文检索系统
搭建solr全文索引
Mysql的搜索速度面对海量数据时显得有点力不从心,使用solr空间换时间,可以快速地帮助我们找到想要的数据。
目录
前期准备
环境:centos7.8.2003(8c12g) jdk1.8.0 mysql8.0.14 solr8.2.0
资源下载移步首页资源下载专区
可以使用xshell以及xftp来方便接下来的操作,在工具文件夹里边有相关软件可以使用。
系统准备:使用centos的iso镜像在VMware安装完之后,我这边没能自动获取到IP,所以先手动修改一下配置文件。
1. 这里我只是作为内网自己使用,所以关闭防火墙并设置开机不自启,并且关闭selinux,不要填错,然后重启
一.配置jdk环境
1. 上传文件到centos上并解压
2. 配置环境变量
二.rpm安装mysql
1.上传文件
2.卸载掉centos7自带的mariadb数据库
3. 按顺序安装rpm包,一定要按照顺序,有相互依赖关系的,最后一个安装需要额外加参数。
4. 启动服务,查看临时密码并登录修改密码
5. 开启远程连接,并修改
如果要用navicat连接,那还需要修改加密方式
6. 使用navicat连接
7. 将一定内容格式的txt数据源按照一定的结构导入mysql中
7.1分析源文件内容及结构,这里是一个很大的10G的txt文件,不能直接用记事本打开,可以使用软件“EmEditor”软件打开大文件查看,也可以使用”powershell“命令截断出来查看(但是默认会是输出utf16-le的编码格式的文件,这里我的源文件的编码格式是utf8,所以有内存还是用EmEditor打开会简单直接点)
打开的内容结构是这样的
7.2在navicat页面创建相应字段的数据库表格
7.2.1表格,这里设置一个ID字段,自增,且为主键,加了主键,solr使用dataimport生成索引会更快
7.2.2引擎修改为MyISAM,对几乎只查询的,这个引擎较友好。
7.3导入txt数据到相对于字段的表格里,这里可以直接使用navicat自带的UI导入,也可以使用mysql数据库自带的LOAD DATA来导入,两者速度差距极大,超过千万,建议就用load data,不然仅仅10G的txt文件导入等半天都有可能。当然前提是cpu核心要给多,我给的是8核,4核很慢。
7.3.1使用navicat自带功能导入(建议使用7.3.2)
选中表格,右键导入向导,文本文件(*.txt),下一步,选择utf8格式的txt数据文件,下一步(这里我的数据,是默认就好)
自己根据数据结构填写上边的,下边的“格式”一般保持默认,下一步
下一步,如果前面选择正确,这里就可以选择源栏位(有时候是f1,f2,f3之类的,与”栏位分隔符“有关),然后一直下一步,开始,就好了。
7.3.2使用mysql自带的load data导入速度快到起飞。
先上传源数据txt到centos上边(依旧使用xftp上传)
登录mysql,直接执行load data会报错,还需要修改一下mysql的配置文件,结尾处添加一行,然后重启mysql,再登录mysql,执行load data语句,然后就是漫长的等待了,文件大,时间长。
貌似使用固态会更快,mysql8默认开启log的,可以考虑关闭log文件,减少I/O压力,应该也有用。
关闭log,查看log功能是否有开启,登录mysql,执行命令”show variables like 'log_bin';“
可以看到log日志是打开的,修改”/etc/my.cnf“,在末尾添加”disable-log-bin“,重启mysqld服务即可生效。
开始导入:
load data infile '/usr/local/solr/kuzi-data/weibo5e.txt' replace into table kuzi.weibo lines terminated by ' ' ignore 1 lines (@C1,@C2) set phone=@C1,uid=@C2;
我们可以看下数据是否正常有
select * from weibo limit 0,10;
SELECT COUNT(*) FROM weibo;
三.配置solr环境
1.创建文件夹并上传solr,解包
2.创建solr的core(类似于MySQL的一张表格)文件夹,做准备
3.拷贝默认conf配置到conf文件夹中,注意目前所在目录
4. 修改相关配置
4.1修改managed-schema文件,大概在125行左右,添加这两条
4.2修改solrconfig.xml文件,大概在782行添加如下配置,上边的一个requestHandler是原有的
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<!-- 配置文件的路径应该也可以使用绝对路径 -->
<str name="config">dataimport.xml</str>
</lst>
</requestHandler>
4.2.1拷贝添加对应的requestHandler jar包
4.2.2上传添加java连接mysql的驱动jar包,必须对应mysql的版本
4.3添加solrconfig.xml文件中指定的dataimport.xml文件(导入大数据,必须添加bachsize,最好添加pk)
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/kuzi?serverTimezone=UTC"
user="root" password="密码"
batchSize="-1"
/>
<document>
<entity name="weibo" pk="id" query="select id,phone,uid from weibo">
<field column="id" name="id"/>
<field column="phone" name="phone"/>
<field column="uid" name="uid"/>
</entity>
</document>
</dataConfig>
5. 优化启动solr,浏览器webUI访问后台
5.1优化修改配置solr,修改配置文件solr.in.sh,添加一行
5.2安装losf(yum install -y losf),然后启动solr并访问后台,solr不推荐使用root启动,需要加参数-force最好用其他用户启动。有警告,最好可以按照提示修改对应参数,生成索引会快很多。
在最后面添加,重启机器
再启动solr
6. 添加相对应的core(最好都同名,name可以不同instanceDir一定要是创建的文件夹的名称)
7. 选择对应的core,并dataimport导入生成检索,前面设置正确就不会很慢,很慢就关闭solr重启一下机器试一下,没有按照提示的设置导入可能会很慢。
导入完成:
8. 用solr的后台ui,查询
9. 删除索引
9.1指定参数删除生成的索引
<delete>
<query>id:1</quety>
</delete>
9.2删除所有索引
<delete><query>*:*</query></delete>
<commit/>
10. 停止solr
11. 给solr设置环境变量,就不用在指定文件夹下才能启动,关停服务了
在“/etc/profile”文件末尾添加solr的环境变量。然后source一下
设置环境变量之后就可以直接使用solr start -force启动solr了
12. 效果演示
使用键值对的方式来查询,速度极快
四.总结
想要提高txt文件导入到mysql中,以及solr使用dataimport生成对应索引的速度:
速度快:
1.用固态
2.mysql关闭日志
3.vmware磁盘用一整块的那个
*4.从txt导入mysql,用load data
*5.mysql添加一个自增主键id
6.solr划分solr.in.sh里边的JVM的内存到4G
7.大内存,多核,我用的是8核,12G
*8.dataimport.xml要加batchSize="-1",以及pk="id",这里的id是solr在managed-schema自带的,生成索引快很多。
9.修改启动solr报的警告的地方
10.数据库引擎用MYISAM