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