Sorl 7.4.0
-
前言:在solr5以前solr的启动都有tomcat作为容器,但是从solr5以后solr内部集成jetty服务器,可以通过bin目录中脚本直接启动。就是从solr5以后跟solr4最大的区别是被发布成一个独立的应用。在solr5之后solr其实特别容易安装,有安装包,之后在解压,直接启动bin下solr,solr就这样完成的启动了。
注意:solr7只能安装在jdk1.8以上的环境中。
-
下载上传so'l'r.zip文件下载zip解压工具(前提是sorl扩展名是zip)
安装命令:
yum install -y unzip zip
解压到当前文件夹:unzip file.zip
进入解压的sorl的bin目录中启动solr即可
- 关闭防火墙的命令:
- systemctl stop firewalld.service #停止firewall
- systemctl disable firewalld.service #禁止firewall开机启动
- firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
- 开启端口的命令:
- firewall-cmd --zone=public --add-port=8983/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令:
lsof -i tcp:80
列出所有端口
netstat -ntlp
- 到目前为止solr7安装完成!
配置solr的核心内容(core)
方法一:点击Core Admin,接着点击Add Core这项,点完之后会出现问题,但是会自动创建new-core目录。
提示缺少配置文件:Error CREATEing SolrCore 'new_core': Unable to create core [new_core] Caused by: Can't find resource 'solrconfig.xml' in classpath or '/data/soft/solrhome/new_core'
解决方法:拷贝server/solr/configsets/_default/下的conf文件夹到solrhome/new_core文件夹下
3.点击Add Core,此时会显示添加成功。
方法二:在启动solr服务的情况下执行以下
进入sorl直接启动bin下solr的命令:./solr create -c (core名字) -force
即可创建一个core
配置中文分词
(小知识点)Vi(vim是vi的升级版)里搜索关键字,在命令模式下敲斜杆( / )这时在状态栏,然后输入你要查找的关键字敲回车就可以了,敲字符 n 就可以继续查找了。
solr6以后就有自带的中文分词器(core里面conf配置)
引入自带分词的jar配置在solrconfig.xml文件中(如果core中的lib存在jar就不用此配置)
<!-- for HMMChineseTokenizerFactory 分词jar--> <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex="lucene-analyzers-smartcn-\d.*\.jar" /> |
positionIncrementGap=”100” 含义:只对 multiValue = true 的fieldType有意义。
在</schema>前增加下面的内容
<fieldType name="text_smartcn" class="solr.TextField" positionIncrementGap="0"> |
配置添加数据库数据(在core里的conf中的solrconfig.xml里面添加)
在xml中75行处添加jar文件
<!-- 引入数据所需架包jar --> <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" /> |
将mysql-connector-Java-*-bin.jar包放入到创建的core的lib中(根据版本自行选择)
创建data-config.xml文件并引入:
<!-- import date 导入mysql数据--> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler> |
conf目录下新建data-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <!--配置数据源--> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://rm-uf6ilhn6at832n7v7ao.mysql.rds.aliyuncs.com/pearshare?serverTimezone=UTC&autoReconnect=true" user="root" password="Lifenxiang2018@"/> <!--query中写SQL语句--> <document> <!-- column对应数据库中的列名,name为对应的域名(在scheme中没有的话需要配置,即设置业务系统域), 这是一个映射关系 --> <!--deltaQuery语句查出所有被修改的数据的ID, deltaImportQuery对deltaQuery查出来的ID的数据进行索引更新并附加query的条件--> <!--全量索引--> <entity name="allShare" pk="id"
query="SELECT s.id, IF(s.cover = '', SUBSTRING_INDEX(s.imgs, ',', 1), s.cover) AS cover, s.title, s.sub_title, s.collection_number, s.last_modify_time, uu.user_id, uu.avatar, uu.nickname, IF(g.end_time >= UNIX_TIMESTAMP(now()) AND g.begin_time <= UNIX_TIMESTAMP(now()),'1','0') as groupStatus, g.activity_amt, IF(g.end_time >= UNIX_TIMESTAMP(now()) AND g.begin_time <= UNIX_TIMESTAMP(now()),g.id,'') AS goodsId FROM share as s LEFT JOIN ucenter_user AS uu ON s.user_id = uu.user_id LEFT JOIN goods AS g ON s.goods_id = g.id WHERE s.status != '1' AND s.enabled != 1"
deltaImportQuery="SELECT s.id, IF(s.cover = '', SUBSTRING_INDEX(s.imgs, ',', 1), s.cover) AS cover, s.title, s.sub_title, s.collection_number, s.last_modify_time, uu.user_id, uu.avatar, uu.nickname, IF(g.end_time >= UNIX_TIMESTAMP(now()) AND g.begin_time <= UNIX_TIMESTAMP(now()),'1','0') as groupStatus, g.activity_amt, IF(g.end_time >= UNIX_TIMESTAMP(now()) AND g.begin_time <= UNIX_TIMESTAMP(now()),g.id,'') AS goodsId FROM share as s LEFT JOIN ucenter_user AS uu ON s.user_id = uu.user_id LEFT JOIN goods AS g ON s.goods_id = g.id WHERE s.id ='${dih.delta.id}'"
deltaQuery="SELECT s.id FROM share as s LEFT JOIN ucenter_user AS uu ON s.user_id = uu.user_id LEFT JOIN goods AS g ON s.goods_id = g.id WHERE s.last_modify_time > '${dataimporter.last_index_time}'"
deletedPkQuery="SELECT id FROM share WHERE status = '1' OR enabled = 1">
<field column="id" name="id" /> <field column="cover" name="share_cover" /> <field column="title" name="share_title" /> <field column="sub_title" name="share_sub_title" /> <field column="collection_number" name="share_collectionsNum" /> <field column="last_modify_time" name="lastModifyTime" /> <field column="user_id" name="share_userId" /> <field column="avatar" name="share_avatar" /> <field column="nickname" name="share_nickname" /> <field column="groupStatus" name="share_group_status" /> <field column="activity_amt" name="share_goodsAmt" /> <field column="goodsId" name="goodsId" /> <field column="status" name="status" /> <field column="enabled" name="enabled" /> </entity> </document> </dataConfig> |
字段名(query deltaImportQuery deltaQuery deletePkQuery)
详解:https://img-blog.csdn.net/20180222174218226
Solr定时增量更新
使用contos的定时任务
打开定时任务的配置文件:crontab -e
配置参数:
*/1 * * * * /usr/bin/curl -G http://地址:端口/solr/创建的core名称/dataimport?command=delta-import&clean=false&commit=true & |
查看配置的定时任务:crontab -l
重启定时任务:sudo /usr/sbin/crond restart
如果出错:rm -rf /var/run/crond.pid
再执行:sudo /usr/sbin/crond start