solr初步学习

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

一、安装

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

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

// 常用命令
./solr start   
./solr restart
./sorl stop

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

图-1.png

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

./solr create –c "core name"

也可以通过后台管理页面手动创建。先进入到 /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文件,添加导入数据处理器,这个和其他的处理器放在一起就可以了。

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    //配置文件的路径应该也可以使用绝对路径
    <str name="config">dataConfig.xml</str>
  </lst>
</requestHandler>
2、配置数据源

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

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
  <dataSource
        driver="org.postgresql.Driver"
        url="jdbc:postgresql://localhost:5432/springboot"
        user="postgres" password="123456"/>
  <document>
      <entity name="user" query="select * from t_user">
        <field column="id" name="id"/>
        <field column="username" name="userName"/>
        <field column="age" name="userAge"/>
        <field column="sex" name="sex"/>
        <field column="address" name="address"/>
        <field column="mobile" name="mobile"/>
        <field column="description" name="description"/>
      </entity>
  </document>
</dataConfig>

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

    <!-- 自定义添加filed -->
    <field name="userName" type="string" indexed="true" stored="true"/>
    <field name="userAge" type="pint" indexed="true" stored="true"/>
    <field name="sex" type="string" indexed="true" stored="true"/>
    <field name="mobile" type="string" indexed="true" stored="true"/>
    <field name="address" type="string" indexed="true" stored="true"/>
    <field name="description" type="string" indexed="true" stored="true"/>

自定义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的配置文件,内容也不多,如果找不到直接复制就行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">custom.dic;</entry> 
    
    <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">stopword.dic;</entry> 
    
</properties>

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

2、配置schema

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

<fieldType name="ik_word" class="solr.TextField">
  <analyzer type="index">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

名字自己随意就好了,到这里关于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应该是可以指定最大分词和最小分词的,但是和solr的整合中自己还没有发现这个功能。
好了,这次关于solr的入门学习先到这里,关于solr的一些基本操作下次再继续学习吧,到时候可以通过一个简单的demo,学习一下如何在代码中使用solr。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容

  • 一.简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通...
    泰安青年阅读 3,667评论 0 37
  • Solr的安装与配置 多数搜索引擎应用都必须具有某种搜索功能,而搜索功能往往大量的消耗资源导致应用程序运行缓慢。为...
    TyCoding阅读 5,255评论 1 5
  • 1. 什么是solr    Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的...
    东方舵手阅读 944评论 1 5
  • 两年前用过solr5.1版本的,当时只是简单入个门,拿来在项目里建个全文索引,然后再query,其他什么也没做,还...
    Coselding阅读 3,095评论 3 22
  • 那是温馨。 早晨的阳光,从窗口打在脸上,眼睛朦胧未开,老妈早已拿着拖鞋在床头站着,”你们先吃嘛!“,我懒散的说,睡...
    Themores阅读 248评论 1 3