1.下载:进入官网下载页:http://www.apache.org/dyn/closer.lua/lucene/solr/7.5.0
下载之后,我们得到一个安装包solr-7.5.0.zip,本示例以windows为例。
二.安装
1 。把solr-7.5.0.zip安装文件解压到指定目录
三. 启动
cmd进入到C:\Users\LSL\Desktop\solr-7.5.0\bin下
启动:solr start
关闭 sole stop -all
启动成功,可访问地址http://localhost:8983/solr/#/ 进入sorl客户端
四:配置core
1.页面新建core如下图所示,
点击add core会报错,没关系,需要进行配置。进入目录中查看已经新建new_core,需添加配置文件
进入如下目录,复制conf文件夹到new_core中
在页面中再次点击add,多次刷新可新建成功
五:数据库配置
1准备mysql连接驱动包,mysql-connector-java-5.1.29.jar,直接maven私服下载或者从自己的项目中获取,这个使用率应该是特别高的。
2找到solr-dataimporthandler-7.5.0.jar和solr-dataimporthandler-extras-7.5.0.jar 。这2个jar在solr安装目录下有,F:\solr\solr-7.5.0\dist
把这3个jar包复制到F:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib 目录下,熟悉java的朋友其实看一眼就明白,这其实是一个标准的web项目目录。
3进入安装目录,F:\solr\solr-7.5.0\example\example-DIH\solr\db,
复制目录下conf文件夹到F:\solr\solr-7.5.0\server\solr\new_core,覆盖之前的目录.
说明:其实创建core的时候,我们就复制过一次,其实大家可以一步到位,第一次就复制F:\solr\solr-7.5.0\example\example-DIH\solr\db的conf文件夹。
在conf目录下,我们可以看到很多配置文件如下:
4 修改db-data-config.xml
初始化的配置文件如下,这是一个数据库连接池的配置文件,我们需要配置自己的数据库地址和查询sql。
修改成自己所需:
配置说明:
dataSource-->数据库连接,用户名密码配置
entity-->sql定义
field-->字段定义,column对应数据库字段,name对应solr的索引字段名
5 修改managed-schema
进入该配置文件,这个配置文件主要用于配置索引字段。我们在配置文件中增加field,要求一一对应。
注意:我们copy来的配置文件中有一些关键字已经配置了,如id,name,那就不需要重新配置field,只需要配置没有的。
如果你的表主键id不是叫id,那么你定义的field需要指定required="true",并把默认的id的required="true"属性去掉,
并把<uniqueKey>id</uniqueKey>修改成你的主键id值,否则数据导入不进去。
说明:因为只是做个基础的搜索业务,没有精细该schema文件,精益求精的小伙伴可以把冗余字段都干掉试试。
到此,配置完成,接下来我们操作导入数据。
六、数据导入
启动成功后进入http://127.0.0.1:8983/solr/#/new_core/dataimport//dataimport
或者在主界面点击Dataimport
点击Entity,我们发现有我们配置的student,勾选中
最后勾选Auto-Refresh Status,点击Excute,
导入成功后可query
表示导入成功
和我们数据库的数据是刚好对应的。
说明:solr中的索引字段名取决于你在managed-schema中如何配置定义。
另外,大家配置的时候注意,不需要进行索引或者存储的字段要配置成false,节省资源空间。
<field name="createTime" type="pdate" indexed="false" stored="true"/>
如创建时间,我们不需要进行查询索引,indexed配置成false即可。
数据清空
进入solr主页,进入Documents模块,如图所示,选择XML类型
输入xml
<delete><query>*:*</query></delete><commit/>
点击Submit Document,结果如下:
此时再去查询,就看到数据都已经清空。
七,增量索引
增量更新索引,顾名思义就是在原有的数据基础上进行索引更新,不会对已有的数据再进行一次索引。
发送"solr"关键字获取百度网盘的下载链接
把jar包复制放到F:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib 目录下
修改F:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF
打开web.xml文件,增加监听器配置
<listener>
<listener-class>
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
</listener-class>
</listener>
这个监听器源码就是来自上面的jar包中,我确认过了。
增加dataimport.properties配置
增加增量导入配置文件,注意,目录!目录!目录!
这个文件在F:\solr\solr-7.5.0\server\solr\new_core\conf 有一个,但是,我们不是配置到这里!敲黑板,划重点!
我们需要在F:\solr\solr-7.5.0\server\solr 目录下,新建一个conf文件夹,注意啦,这个文件夹是我们手动新建的,如果没操作这一步,你就是操作不当。
然后在conf目录下,新建dataimport.properties 文件。
文件内容如下(以下文件来源于网络):
#################################################
# #
# dataimport scheduler properties #
# #
#################################################
# to sync or not to sync
# 1 - active; anything else - inactive
syncEnabled=1
# which cores to schedule
# in a multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
# 修改成你所使用的core
syncCores=my_core
# solr server name or IP address
# [defaults to localhost if empty]
server=localhost
# solr server port
# [defaults to 80 if empty]
# 安装solr的端口
port=8983
# application name/context
# [defaults to current ServletContextListener's context (app) name]
webapp=solr
# URL params [mandatory]
# remainder of URL
# 这里改成下面的形式,solr同步数据时请求的链接
params=/dataimport?command=delta-import&clean=false&commit=true
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
#这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改
# 开始测试的时候为了方便看到效果,时间可以设置短一点
interval=1
# 重做索引的时间间隔,单位分钟,默认7200,即5天;
# 为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
# 重做索引的参数
reBuildIndexParams=/select?qt=/dataimport&command=full-import&clean=true&commit=true
# 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
# 两种格式:2012-04-11 01:00:00 或者 01:00:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=01:00:00
这个文件说的挺详细的,建议存档理解。因为运行一次之后,这个文件会变成酱紫了,but,我们并不需要care了
修改db-data-config.xml配置
总算来到"终极BOSS关",我们只需要再配置2个脚本,就KO了,再坚持一下吧。
直接上配置代码吧,简单粗暴一点。
说明:
主要增加了deltaImportQuery和deltaQuery 2个属性,其实这个就是作为增量时的操作sql,solr默认读取这个key值的sql语句。
${dataimporter.delta.id} 这个东东,我没找到具体的定义在哪,但是如果你的主键id配置的不叫id,如叫studentId,那么,这个取变量就应该写成${dataimporter.delta.studentId}
${dataimporter.last_index_time} 固定写法,更新的判断条件,上一次的修改时间需要大于上一次索引的更新时间。
这个参数会自动更新在F:\solr\solr-7.5.0\server\solr\new_core\conf 下的dataimport.properties文件中
这个文件长这样,了解一下:
九重启验证
嗷嗷嗷,总算配置完成,那么赶紧重启一波,验证一把呗。
验证步骤1:重启完服务后,观察solr日志
验证步骤2:去数据库中新建或者修改数据,静静等待你配置的增量时间
数据库修改数据,查看查询结果,观察数据是否已经同步
当你看到出现出现如下日志:(日志目录-->F:\solr\solr-7.5.0\server\logs\solr.log)
2018-10-22 10:05:18.234 INFO (Thread-17) [ ] o.a.s.h.d.DataImporter Starting Delta Import
2018-10-22 10:05:18.235 INFO (Timer-0) [ ] o.a.s.h.d.s.BaseTimerTask [new_core] <index update process> Response message OK
2018-10-22 10:05:18.235 INFO (Timer-0) [ ] o.a.s.h.d.s.BaseTimerTask [new_core] <index update process> Response code 200
2018-10-22 10:05:18.235 INFO (Timer-0) [ ] o.a.s.h.d.s.BaseTimerTask [new_core] <index update process> Disconnected from server localhost
2018-10-22 10:05:18.236 INFO (Timer-0) [ ] o.a.s.h.d.s.BaseTimerTask [new_core] <index update process> Process ended at ................ 22.10.2018 10:05:18 235
说明增量同步已经执行...
查询solr:
至此,增量同步配置完成!
八 分词
下载解压后,把ik-analyzer-solr5-5.x.jar 放到F:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib 目录下。
修改F:\solr\solr-7.5.0\server\solr\new_core\conf 目录下的managed-schema 文件。
增加分词器的fieldType定义:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
name="text_ik",分词器名称,在后面的filed定义的时候,可以直接引用。
如,type定义为"text_ik",则代表该字段将进行分词索引
<field name="studentName" type="text_ik" indexed="true" stored="true"/>
3.查看
进入solr主页,进入Analysis,输入一段汉字,选择text_ik,点击分析可以看到如下结果:
如上,说明分词成功。
中文分词器:
solr自带了一些中文分词器,比较好用的是SmartChineseAnalyzer,但是扩展性比较差不能自定义扩展中文词库,所以这里选择使用IKAnalyzer,这是第三方的一个分词器可以很好的扩展中文词库,IKAnalyzer下载后解压会有如下文件
把核心jar文件复制到solr WEB应用的lib文件夹下,如下图
把配置文件和词库等文件复制到WEB应用的classes文件夹下,如果子WEB-INF下没有这个文件夹自己创建即可,如下图:
如果想要扩展词库可以在ext.dic文件中配置自定义的中文词组,例如:诛仙这个词组,这个分词器的算法是算不出来的但是通过我们自定义词库,分词器也可以把诛仙列出关键词。
上图是ext.dic文件中的内容,注意编辑此文件时字符编码最好是UTF-8无BOM模式,这个可以通过EditPlus等文本编辑工具设置。下面开始在Schema中应用分词器如下图:
定义了一个text_ik这个字段类型并采用Ik分词器,接下来在field元素定义式指定type=text_ik就可以把这个分词器应用在这个field中