安装使用Solr
本文实例:solr:8.10.0
jdk:1.8
一. 简介
基于Luncene的全文搜索服务器,同时对其进行了扩展(扩展了面向抽象编程的地方,比如分词器,查询),提供了比Lucene更为丰富的查询语言(比如,过滤器),同时实现了可配置(跟hadoop整合,之前索引结构写在代码中,现在提前定义好)、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
安装配置
Linux配置方式与window大差不差,只是在某些命令后加入
-force
二、下载安装solr
将下载好的安装包解压到一个没有空格,没有中文的路径
下载地址https://solr.apache.org/downloads.html
下载后解压文件:
启动solr,进入bin目录执行solr.cmd start即可启动solr服务
cd bin
#启动solr
solr.cmd start
# 关闭solr
solr.cmd stop -all
#Linux操作
#开启
solr start -force
#关闭
solr stop -all -force
启动成功提示!打开localhost:8983就可以看到已经启动了
三、创建Core
默认情况下直接添加是不可以的,会报错
有两种方式:
第一种方式 比较复杂
需要手动进入 solr的安装目录 > server> solr 下创建需要创建的core名称文件夹
此时新建的名称就是core的名称,创建需要复制同级项目下的conf文件到新创建的文件夹中
进入浏览器选择Core Admin进行创建,此时name和instanceDir需要与新建的文件夹名称一致
第二种方式 简单推荐
需要启动服务后执行此命令
//创建core
solr.cmd create -c 名称
这样就直接创建好了一个core,打开浏览器刷新就可以看见创建好的Core了
四、连接Mysql数据库
- 添加依赖包
需要以下三个依赖包
名称 | 位置 |
---|---|
solr-dataimporthandler-x.x.x.jar | 安装根目录下的dist文件夹内 |
solr-dataimporthandler-extras-8.2.0.jar | 安装根目录下的dist文件夹内 |
mysql-connector-java.jar | 找到合适的mysql依赖(maven…) |
需要找到以上文件,将三个文件复制到 solr安装目录下的**/server/solr-webapp/webapp/WEB-INF/lib**文件夹下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iga3mlJ5-1634109358631)(C:/Users/xiaoge/AppData/Roaming/Typora/typora-user-images/image-20211012140133156.png)]
-
修改配置文件 solrconfig.xml
修改当前创建core名称目录下的conf\solrconfig.xml
打开文件,找到下面语句的位置
<requestHandler name="/select" class="solr.SearchHandler">
在该语句的上方添加如下语句:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
如图:
-
新建data-config.xml文件
在当前创建core文件目录下的conf目录下创新建data-config.xml文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource name="source1" type="JdbcDataSource" driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/test1" user="root" password="root" encoding="UTF-8"/> <document> <entity name="tb_article_info" processor="SqlEntityProcessor" pk="id" query="select id,article_name,article_abstract from tb_article_info"> <field name="id" column="id"/> <field name="article_name" column="article_name"/> <field name="article_abstract" column="article_abstract"/> </entity> </document> </dataConfig>
这里配置自己的数据库以及表信息和映射字段信息
如果使用Mysql数据库版本为8.x则推荐使用驱动类
com.mysql.cj.jdbc.Driver
,需要使用Mysql8.0驱动包 -
修改文件managed-schema
修改当前创建Core目录下的conf文件夹下的managed-schema
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="article_name" type="string" indexed="true" stored="true"/> <field name="article_abstract" type="string" indexed="true" stored="true"/>
根据表字段进行映射
重启solr服务
这样就已经将数据导入到Solr中了,可以查询一下是否有数据
测试ok!
分词操作
打开浏览器,在下拉列表中选择分词操作-article,然后选择Analysis,输入想要进行分词的文本,在Analyse Fieldname / FieldType处选择_text_,点击Analyse Values,会出现分词的结果。可以看到几乎和没分一样。这是因为我们没有安装合适的中文词库。
一、下载安装中文分词词库
下载地址:https://search.maven.org/search?q=com.github.magese
下载为jar包形式,并且将下载好的jar包放入solr目录下的**\server\solr-webapp\webapp\WEB-INF\lib**
二、修改配置
修改**/server/solr/articles/managed-schema**文件,在文件末尾</schema>之前添加以下代码:
<fieldType name="text_ik" 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>
修改文件后重启solr服务
solr.cmd stop -all
solr.cmd start
# linux 操作
solr restart -all -force
重启后将Analyse Fieldname / FieldType内容选择为我们自定义的 text_ik 进行分词
三、测试使用分词器查询数据
-
需要将要分词的字段内容的type改为text_ik
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="article_name" type="text_ik" indexed="true" stored="true"/> <field name="article_abstract" type="text_ik" indexed="true" stored="true"/>
-
如果没有修改直接运行solr默认执行的是text_general,需要删除solr中导入的数据,修改字段type属性后再次导入
删除导入的数据:
删除成功,如图:
再次导入,导入后测试分词查询结果。
- 测试查询
四、查询参数
参数名 | 描述 | 示例 |
---|---|---|
q | 主要查询参数,以冒号分割,左边是字段名,右边是值,查询全部则为*😗 | age:20 |
fq | 过滤查询参数,可添加多个,格式与q一致 | name:韩 |
sort | 排序方式,字段与排序中间以空格隔开,多个以都逗号分隔,排序值为desc或asc | id desc,name asc |
start | 起始位置,默认为0 | 1 |
rows | 获取记录数,默认为10条 | 100 |
fl | 返回指定的字段,多个以逗号分隔 | id,name |
df | 默认的查询字段,设置后q与fq可以只输入值 | |
wt | 返回结果的形式,支持json、xml、python、ruby等 | json |
indent off | 返回结果是否缩进,默认缩进,选择则为不缩进 | |
debugQuery | 返回结果是否显示debug信息 | |
hl | 开启高亮显示 | |
hl.fl | 要高亮显示的域 | |
hl.simple.pre | 高亮显示的前缀 | |
hl.simple.post | 高亮显示的后缀 |