Solr7.4.0应用部署Demo,比较全面完整,亲测有效

本教程详细介绍了如何在Windows10上部署Solr7.4.0,包括安装、创建core、配置MySQL数据索引、设置增量更新和定时更新。通过实例演示了全量更新、增量更新和高亮显示等功能,适合初学者掌握Solr基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文参考:
http://www.cnblogs.com/tony-zt/p/9260017.html
http://www.importnew.com/12707.html
https://blog.youkuaiyun.com/wzy18210825916/article/details/80946454
https://blog.youkuaiyun.com/column/details/17959.html
https://www.2cto.com/database/201708/668379.html
感谢以上分享的作者。
本篇为Solr7.4版本 + windows10系统为案例进行配置和部署。通过本篇内容小白都可以掌握Solr的基本使用方法,get新技能。

系统要求:
JDK 1.8以上
一、“安装”
从官网下载Solr7.4(或本资源包内直接解压,本包内也是官网下载的)

下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.4.0/

因为我是Windows系统所以选的是.zip的版本,如果是Linux系统需要用.tgz的版本,下面都是以Windows系统下的示例。

Solr7.4是免安装的,解压后就可以直接使用了。

win+R,在打开输入栏:输入 cmd ,点确定,弹出命令提示符窗口
这里写图片描述
在窗口中输入你的Solr安装的盘符加冒号,比如 D:回车

然后再输入:cd 你的Solr安装路径一直到bin文件夹,
比如我的是: D:\Work_Space\Solr\solr-7.4.0\bin
这里写图片描述
回车,然后再输入:solr start
会出现下面的信息,7.4的里面会有一些错误信息,但不影响使用。6.6版本的没有,6.6版本的配置方法和7.4是完全一样的。如果有强迫症的可以使用6.6.0或6.6.1(其他的没试过)
这里写图片描述
Solr的默认端口号是8983
启动成功后,可以用浏览器验证一下:
地址栏输入:http://localhost:8983/solr
就会出现Solr控制台主页面:
这里写图片描述
提前声明一下,Solr7.4是自带Jetty服务器的,不需要集成到Tomcat服务器中。反正我是不会这么做,因为分离开方便后期维护,如果想要修改Solr的配置也不需要停掉项目。所以,为什么要部署到Tomcat?不啰嗦了,自己看吧。

二、创建core
在cmd窗口输入: solr create -c testcore
testcore 是自己起的名字,回车后会出现下面的信息(还是会有log4j2的错误信息,不用管)
这里写图片描述
我们刷新一下控制台可以看到:
这里写图片描述
点击Core Selector,选择刚刚创建的testcore,可以看到如下界面:
这里写图片描述
Core也可以直接在控制台创建,但是需要自己先再Solr安装根目录/server/solr目录下创建一个core文件夹,而且里面要自己创建一个data文件夹。然后通过控制台的Core Admin创建core 。
个人建议直接在cmd窗口用命令创建,省力省心还可靠。
网上还有自己拷贝conf文件夹到自己创建core 等等的操作,感觉太麻烦。有兴趣的自行百度。

三、配置core索引MySQL数据

1、把数据库驱动jar包放到
Solr安装根目录/server/solr-webapp/webapp/WEB-INF/lib下
这里写图片描述
2、把Solr安装根目录/dist文件夹下的
solr-dataimporthandler-x.x.x.jar
solr-dataimporthandler-extras-x.x.x.jar
这里写图片描述
放到Solr安装根目录/server/solr-webapp/webapp/WEB-INF/lib下
这里写图片描述
3、Solr安装根目录/server/solr/核心/conf路径下添加文件data-config.xml,并添加以下内容(示范如下)

3.1全量索引

<dataConfig>
    <!-- url如果包含特殊字符如";",必须使用html转移字符 -->
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/solrdb"     user="root" password="123456"/>
    <document>
        <!-- query为全量更新SQL -->
        <entity name="testdb" pk="tid" query="select * from testdb">
<!-- 每一个field映射着数据库中列与文档中的域,column是数据库列,name是solr的域(必须是在managed-schema文件中配置过的域才行) -->
            <field column="tid" name="idid"/>
            <field column="tname" name="TName"/>
            <field column="tbirthday" name="TBirthDay"/>

        </entity>
    </document>
</dataConfig>

3.2增量索引(含同时具有全量和增量索引的功能)
可以直接配置这一个跳过3.1,上面3.1的配置是为了能让你区别全量和增量配置的不同之处。

3.2.1
solr默认使用UTC时间,即与中国时差8小时,所以需要修改配置文件:
Solr安装根目录/bin/solr.in.sh

SOLR_TIMEZONE=”UTC+8”
默认是注释掉的,找到SOLR_TIMEZONE修改后面的值为UTC+8
注意:如果单纯修改solr.in.sh文件没有作用,就修改和solr.in.sh同目录下的solr.cmd文件,修改其中的set SOLR_TIMEZONE=UTC为set SOLR_TIMEZONE=UTC+8

3.2.2
修改mysql数据库的表结构,添加一个时间戳字段,当某行数据发生更新时该字段自动更新为修改数据的时间,为solr增量添加提供服务(范例如下)
ALTER TABLE testdb ADD last_modified TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT current_timestamp

3.2.3
修改solr/server/solr/核心/conf路径下添加文件data-config.xml,并添加增量SQL(示范如下)

就是多添加了deltaQuery部分

<dataConfig>
    <!-- url如果包含特殊字符如";",必须使用html转移字符 -->
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/solrdb" user="root" password="123456"/>
    <document>
        <!-- query为全量更新SQL -->
        <entity name="testdb" pk="tid" query="select * from testdb"
            deltaQuery="select tid from testdb where last_modified > '${dih.last_index_time}'">
            <!-- 每一个field映射着数据库中列与文档中的域,column是数据库列,name是solr的域(必须是在managed-schema文件中配置过的域才行) -->
            <field column="tid" name="idid"/>
            <field column="tname" name="TName"/>
            <field column="tbirthday" name="TBirthDay"/>

        </entity>
    </document>
</dataConfig>

4、修改solrconfig.xml,添加以下内容


data-config.xml

5、修改managed-schema,添加mysql中需要存入solr的字段(示范如下)


准备测试效果:
数据库里的数据:
这里写图片描述
注意:当last_modified的值是0000-00-00 00:00:00时会有错误,
因为java的时间是从1970年开始的,所以不能翻译这个时间,导致的结果就是查不到数据。
现在测试全量更新:依次选择1234
这里写图片描述
结果是:
这里写图片描述
这里写图片描述
测试增量更新,在数据库新添一条数据
注意:增量更新就是只更新有变化的数据,不会更新没有变化的数据。如果增量更新选择clean会删除所有的原索引数据,然后只更新有修改过的数据。
正常使用情况下增量更新的clean是不选择的。这里为了测试更新方式是增量更新的方式,所以选择了clean。切忌用在项目中!!!除非你知道会有什么后果
这里写图片描述
结果是:
这里写图片描述
这里写图片描述
我们看到,之前的两条数据被删除了,只有一条新添加的数据。证明增量更新的功能有效。
四、接下来我们配置一个实用的功能:定时更新
因为数据库的数据可能是动态变化的,为了能和数据库的数据“及时”同步,所以就有了这个功能。
它可以按设定时间自动更新一次索引

4.1修改testcore目录下的配置文件core.properties
name=testcore
config=solrconfig.xml
schema=data-config.xml
dataDir=data

4.2添加实时更新索引相关的jar包:dataimportscheduler-1.2.jar 到
Solr安装根目录/server/solr-webapp/webapp/WEB-INF/lib下

还有两个jar包因为之前已经添加过了就不需要添加了,是
solr-dataimporthandler-x.x.x.jar
solr-dataimporthandler-extras-x.x.x.jar

4.3 修改Solr安装根目录/server/solr-webapp/webapp/WEB-INF/web.xml
把这个添加到里面


org.apache.solr.handler.dataimport.scheduler.ApplicationListener


注意:中间的内容两边不要有空格,容易出现不正常现象

4.4添加更新配置文件:Solr安装根目录/server/solr下新建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
#syncCores=game,resource
syncCores=testcore
#  solr server name or IP address
#  [defaults to localhost if empty]
server=localhost
#  solr server port
#  [defaults to 80 if empty]
port=8983
interval=2
#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
webapp=solr
#  URL params [mandatory]
#  remainder of URL
params=/dataimport?command=delta-import&clean=false&commit=true
#  schedule interval
#  number of minutes between two runs
#  [defaults to 30 if empty]

#  重做索引的时间间隔,单位分钟,默认7200,即5天; 
#  为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200

#  重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true

#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00

测试定时更新
这里写图片描述
我们先全量更新一下所有数据,然后在数据库添加一条数据,再等一分钟直接查询
更新前
这里写图片描述
更新后
这里写图片描述
五、配置中文分词
solr自带的几个分词器对中文支持并不好,所以需要使用第三方分词器对中文进行分词索引。
常用的分词器有:ansj和ik,前者的效果更好。
注:目前发现ansj分词器索引内容大小超过65248字节时,会报异常,目前尚未找到解决办法
5.1需要的jar包:
ansj_lucene5_plug-5.1.1.2.jar
ansj_seg-5.1.1.jar
ik-analyzer-solr5-5.x.jar
nlp-lang-1.7.2.jar

放到Solr安装根目录/server/solr-webapp/webapp/WEB-INF/lib 中

5.2配置放到Solr安装根目录/server/solr/testcore/conf下的managed-schema
(还是之前配置的那个)

<!-- ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
   <analyzer type="index">
         <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
   </analyzer>
   <
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值