solr学习入门(一)

前段时间自己简单的学习了一下Elasticsearch,但是我们目前开发项目中其实使用的还是solr,自己之前虽然也接触过solr,但是并没有系统的学习过,所以这次准备系统的学习一下。另外我看到网上很多solr服务都是和tomcat整合使用的,这点我确实不太理解(solr是个web项目没错,但是没感觉到它需要基于tomcat来使用),这次自己也是单独使用solr的,没有和tomcat做整合。

一、安装

首先下载solr,下载地址,然后选择相应的目录,我本地安装位置:

/home/ypcfly/ypcfly/software/solr/solr-7.5.0

解压以后直接进入到安装路径下的bin目录,执行启动命令启动solr服务,启动成功后,打开浏览器访问:

localhost:8983/solr

图-1.png

表示服务器已经成功启动了,接下来我们需要创建一个core,一个solr服务是可以有多个core的,创建core可以直接通过命令创建

也可以通过后台管理页面手动创建。先进入到 /home/ypcfly/ypcfly/software/solr/solr-7.5.0/server/solr目录下,创建一个文件夹"custom_core",并复制同目录下的configsets文件夹下的"conf"文件夹到"custom_core",然后进入solr的后台管理页面,如下图:

图-2.png

如果创建过程中出错,按照错误信息提示修改就可以了,这个过程还是很简单的。最后在"core selector"下可以选择自己的core,并进行其他的操作,到这里solr的安装以及core的创建就完成了。

二、数据导入

core创建好了之后,solr还没有数据,所以需要从数据库批量添加数据到solr服务器。数据导入可以通过solr后台管理页面导入,也可以通过代码操作solr客户端导入,这里就简单的通过后台管理页面导入数据。先选择需要导入数据的core,然后选择Dataimport,如下图:

图-3.png

但是,在导入之前我们还有两个很重要的事情需要处理:一是配置导入数据需要的处理器;二是配置数据源。

1、配置导入数据处理器

打开 /home/ypcfly/ypcfly/software/solr/solr-7.5.0/server/solr/cutom_core/conf/solrconfig.xml文件,添加导入数据处理器,这个和其他的处理器放在一起就可以了。

2、配置数据源

然后在conf文件夹下新建一个dataConfig.xml文件(名字自己随意取,只需要和上面solrconfig配置中的名称一致即可),并配置数据源和相关的document,也就是需要导入的数据。solr的数据源是支持多个数据库的,比方我可以使用mysql的user表,同时使用postgresql的order表,只是相对复杂一点,多库的情况个人感觉应该很少见。具体可以见solr官方文档,我依然使用的是postgresql数据库,其他数据库一样的格式。这里我document配置了最简单的单表查询。entity就是我们的"实体",column就是表的列名,name是对应的solr的Field。

数据源的配置文件配置好以后,需要将数据库查询的column的名字和solr中Field的名字对应起来,所以还需要在schema配置文件添加相关的Field,打开conf下面的managed-schema文件,添加相应的Field。

自定义Field的类型必须是solr已有的类型,indexed表示改字段是否支持索引,stored表示是否会存储。至于为什么我没添加id,那是因为solr已经有了id字段,所以不需要用户再去定义了。

最后一个是导入相关的jar包,因为数据导入我们使用到了数据库,所以必须要有数据库驱动的jar,另一个就是solr自带的data-import的jar。数据库驱动根据自己数据库选择,而solr自带的两个相关jar包,可以在solr解压目录"dist"目录下找到,我本地路径:

/home/ypcfly/ypcfly/software/solr/solr-7.5.0/dist

一个是solr-dataimporthandler-7.5.0.jar,另一个是solr-dataimporthandler-extras-7.5.0.jar。将这三个jar包复制到"../server/solr-webapp/webapp/WEB-INF/lib"文件夹下。

然后重新启动solr服务器。

3、导入数据

启动好solr服务器后,打开solr后台管理页面,选择"Dataimport",勾选上"图-3"中的"Clean"和"Commit",然后点击"Excute"执行成功后,在点击旁边的"Refresh status",如果报错的话根据报错信息进行排除即可。然后我们查询一下数据是不是真的导入成功,选择查询所有数据,看结果是否一致就可以了。

图-4.png

结果总共有4条记录和我数据的数据完全一致,说明数据导入成功了。

三、安装IK分词器

其实solr也好elasticsearch一般都会配置单独的中文分词器,根据需要可能会选IK或者pingyin,也可能都安装,下面简单记录下安装IK中文分词的过程。solr也是有自带分词器的,但是对中文支持并不好,所以都会需要安装专门的中文分词器。

1、配置IK

先根据自己solr版本下载相应的IK分词器包,下载地址。感觉solr版本的IK下载地址不太好找,不像Elasticsearch非常容易找到每个版本对应的IK。下载的时候选择jar格式,下载之后将jar包复制到"../server/solr-webapp/webapp/WEB-INF/lib"文件夹下,我的本地路径是:

/home/ypcfly/ypcfly/software/solr/solr-7.5.0/server/solr-webapp/webapp/WEB-INF/lib

然后在WEB-INF文件夹下新建一个"classes"文件,复制IK分词器需要的相关配置文件(我是从jar包解压获取的)到classes目录下,其实主要就一个,那就是"IKAnalyzer.cfg.xml",也就是IK的配置文件,内容也不多,如果找不到直接复制就行

在上面的配置文件中我已经自定义了我的用户词典,当然还没用配置相关的词。用户词典应该也可以配置远程字典的,但是这里不知道为什么没有。

2、配置schema

这里我们需要打开"core"/conf目录下的"managed-schema"文件,然后添加上IK的分词器的配置内容:

名字自己随意就好了,到这里关于IK分词器的整个配置就完成了,接下来使用IK分词器测试一下

3、测试

配置IK完成后启动solr服务器,选择自定义的core,选择"Analysis",随意输入一段中文,然后选择到"ik_word"(和上面managed-schema配置中自己定义名称一致),点击右侧"Analyse Values",结果如下:

图-5.png

这个时候我自定义的用户字典还每没添加任何的词语,但是根据结果也看出来,其实IK已经帮我们做了一些分词了,只是效果比较差,更多的还是一个一个的汉字,下面是分词结果:

这是IK默认的分词效果,现在我们使用我们自己的那字典,然后再测试一下。先进入相关的文件夹,即

/home/ypcfly/ypcfly/software/solr/solr-7.5.0/server/solr-webapp/webapp/WEB-INF/classes

打开自定义的字典文件custom.dic,并添加几个词语,我添加的词语如下:

也就是说这些词会被solr单独分出来作为一个不可分的最小单元,完成后重新启动solr再测试一次,结果如下:

图-6.png

相比第一次没添加的时候已经好些了,整个分词结果如下:

通过两次分词结果对比很直观的就发现,自定义字典里的词都已经分出来了,但是感觉效果还是不太好,我记得IK应该是可以指定最大分词和最小分词的,,自己在ES上安装ik确实是支持最大分词和最小分词的,但是和solr的整合中自己还没有发现这个功能,不知道是不是ES对IK又做了一些专门的优化,ES每个版本都会有对应的IK版本,不需要自己再去找,但是solr安装IK,自己找了很久才找到,这点来说ES做的很不错。

好了,这次关于solr的入门学习先到这里,关于solr的一些基本操作下次再继续学习吧,到时候可以通过一个简单的demo,学习一下如何在代码中使用solr。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181215G0M2PR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券