solr5.5整合IK分詞及mysql定時資料同步的開發記錄
目錄
1.前言
solr主要用於全文搜尋用的,類似我們看到在搜尋框輸入一個詞或者字,就會自動下拉和此相關的記錄,並且把關鍵字高亮的效果大多都是通過solr實現的。有人可能要說,直接用mysql模糊匹配不是就能實現嗎?其實卻是也是可以實現,在知識庫資料量小的情況下,直接like模糊匹配就行了,找到相似的前多少條返回前端進行展示即可,但問題是,一般情況下知識庫的內容都不是簡單幾千條或者幾萬條,知識庫的資料量都是非常大,這時候如果還用like模糊匹配,你會發現簡直就是災難啊。like預設情況下是會掃全表的,這時候查詢效率就非常慢,使用者體驗超級差。但是solr的搜尋不同,簡單說一下我對solr搜尋的理解如下。
solr是對拿到的記錄進行分詞,將每個詞進行儲存,並將詞和內容建立對應關係,並對此做索引。例如分出兩個詞A、B,後續如果還有新的文件記錄過來也分出有A、B詞的話,就會把文件也掛到對應這倆詞的文件連結串列上。當我們輸入內容進行查詢的時候,會先對內容進行分詞,根據詞找到詞對應的文件連結串列,然後把記錄返回。可以簡單理解為詞是主鍵,和文件內容是一對多關係。當然實際的技術實現可能我說的要複雜的多。下面貼兩個連結,有興趣的可以自己去研究看一下。
solr5.5最好配合tomcat8和jdk8,不然總會發現意想不到的問題。
下面從環境搭建到solr部署記錄下實際專案中關於solr的應用。
2.java環境
2.1 安裝jdk
登入需要安裝的主機之後,輸入命令:uname –i。檢視系統資訊,如果是i386,則使用jdk-8u11-linux-i586.tar.gz 安裝包;如果是x86_64,則使用jdk-8u171-linux-x64.tar.gz 安裝包。從jdk安裝包目錄中拷貝相關安裝包到/opt/java目錄下進行安裝即可。
2.1.1 64位安裝
1>.把jdk-6u45-linux-x64.bin拷貝到新建的java目錄下
2>.解壓縮:tar zxvf jdk-8u171-linux-x64.tar.gz
2.1.2 32位安裝
1>.把jdk-8u11-linux-i586.tar.gz拷貝到java目錄下
2>.解壓縮:tar zxvf jdk-8u11-linux-i586.tar.gz
2.1.3 環境變數
cd到根目錄,執行:vi /etc/profile
檔案開啟後,上下鍵,移動到底部, 開始插入:
--64位安裝
export JAVA_HOME=/opt/java/jdk1.8.0_171
export JAVA_BIN=/opt/java/jdk1.8.0_171/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
--32位安裝
export JAVA_HOME=/opt/java/jdk1.8.0_11
export JAVA_BIN=/opt/java/jdk1.8.0_11/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
輸入完畢,Esc,然後輸入 :wq 儲存退出
2.1.4 重新整理許可權
執行:. /etc/profile
2.1.5 確認安裝
命令列輸入:java –version,檢視版本,顯示如下,則說明安裝成功。
3 安裝tomcat8
拷貝apache-tomcat-8.0.52.tar.gz至/opt/solr目錄下,執行tar zxvf apache-tomcat-8.0.52.tar.gz 解壓成功,修改apache-tomcat-8.0.52為tomcat-solr。
3.1 修改埠號
開啟/opt/solr/tomcat-solr/conf/server.xml 修改預設8080埠為8007 修改AJP預設8009埠為8091
3.2 設定tomcat-user
開啟/opt/solr/tomcat-solr/conf/tomcat-users.xml 在</tomcat-users>這一行上面新增如下行:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="solr" password="solr_lzy" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
最後一行是設定的使用者solr,密碼solr_lzy的使用者具備這些訪問許可權。
3.3 驗證tomcat
進入到tomcat-solr/bin/目錄下,執行:./startup.sh
瀏覽器中輸入:http://ip:8007 顯示如下頁面,則說明正常。
如果想檢視tomcat中應用的狀態,點選Server status,輸入前面配置的使用者名稱、密碼既可以登入檢視。tomcat驗證成功之後,./shutdown.sh停止tomcat,然後進行後續操作。
4.配置solr
4.1 拷貝solr-webap
複製solr-5.5.5/server/solr-webapp/webapp到tomcat下的webapps目錄下,改名為solr。
切換到 /opt/solr 目錄下,執行:
cp -r solr-5.5.5/server/solr-webapp/webapp tomcat-solr/webapps/solr
4.2 拷貝額外jar包
把額外jar下的jar檔案全部拷貝到 tomcat-solr/webapps/solr/WEB-INF/lib/ 目錄下
把將solr-5.5.5/server/lib/ext/目錄下的所有jar包複製到tomcat-solr/webapps/solr/WEB-INF/lib/下。
額外jar報主要包括幾部分:
IKAnalyzer2012FF_u2.jar IK分詞的jar包,親測solr5.5可用
pinyin4j-2.5.0.jar pinyinAnalyzer4.3.1.jar 拼音分詞搜尋用到的jar
solr-dataimportscheduler-1.1.1.jar mysql自動同步用的jar,親測solr5.5可用
4.3 建立日誌資料夾
在opt/solr目錄下新建solr-log目錄,用來存放solr相關日誌資訊。
4.4 建立資料區
將solr-5.5.0/server/solr目錄複製到/opt/solr/solrhome 目錄下,這個就是傳說中的solr/home(存放檢索資料)
切換到opt/solr目錄下,執行:cp -r solr-5.5.5/server/solr solrhome
4.5 設定solr/home
編輯tomcat-solr/webapps/solr/WEB-INF/web.xml檔案,一下部分是註釋的,把註釋去掉。solr在啟動的時候會去這個根目錄載入相關資訊。
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/opt/solr/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
5.其他配置
其他配置主要是關於ik分詞和log4j的配置檔案,ik分詞可以配置關鍵詞字典和停用詞字典。log4j配置檔案可以配置solr服務執行時候的log日誌目錄。
6.關鍵字分詞命中
目前solr搜尋是基於IKAnalyzer做的中文分詞,基礎詞庫內容都是常用的詞庫,例如人民日報內容等。而和業務緊密關聯的知識庫內容未必能達到很好的分詞效果, 因為有些詞在詞庫中並沒有,因此單純的部署釋出後,對於特定詞的查詢可能無法達到既定的目標要求。
例如:有一條知識庫記錄的標題為:時代花世界的聯絡方式什麼?我們可能想根據“時代”、“花世界”進行搜尋查詢,但是預設情況下IK分詞無法把“花世界”這樣的結果分出來,就造成查詢效果不佳的情況。同樣的,我們可能不需要“什麼”這樣的詞,但是Ik預設會把他分出來,此時可以通過配置停用詞字典來過濾掉不需要的詞,增加分詞準確性和搜尋的精準度。
IK分詞支援自定義維護字典和停用詞字典的功能,具體操作可以參考部署手冊中的說明,對不同專案中不同業務情況下的知識庫資訊進行關鍵詞庫和停用詞庫的配置。
7.清空solr資料
在瀏覽中輸入:http://129.204.91.167:8007/solr/index.html ,在左側選單,選擇core1->Documents,然後選擇/update,type選擇xml,輸入一下內容:
<delete><query>*:*</query></delete>
<commit/>
然後執行就完成清空操作。具體如下圖所示:
8.手工同步資料
在左側選單中,選擇core1->Dataimport,然後選擇full-import,Entity選擇wiki,然後點選Execute,等Refresh Status 變色後,點選重新整理,就可以從右側看到匯入的資訊。具體如下圖所示: