solr 7.0 搭建 maven 整合,基於tomcat 搜尋引擎 部署

美式不加糖_發表於2017-12-08

title: solr 7.0 maven 整合,引擎搭建

author: Eric liu

tags: [solr,引擎,搜尋] categories:

  • solr
  • 搜尋

專案背景:

最近工作用到solr做搜尋,覺得挺有趣,自己建立一套引擎,也方便研究。
看網上基本都是手動配置的,拷貝jar包,沒有maven整合的,有整合solr版本也很老。
所以先自己與maven 整合了一下。
之後 可能會有一些 定製化的功能新增到這個專案中。如自定義分詞器,自定義評分等。
複製程式碼

solr使用: 本專案只是引擎,關於solr的使用,我放在另一個專案中, 另一個專案主要用來 使用solr,和一些 自定義的solrUtils,拼音, 業務場景下的solr 條件拼接,搜尋,文章feed,suggest等多中功能的具體實現和說明 附帶,測試資料。

github 地址

https://github.com/Eric-ly/solr_engine
複製程式碼

一,前期配置/說明

1.下載tomcat 8,在bin中新增 工程中的setenv.sh ,自定義 tomcat的啟動引數

    export SOLR_HOME="$CATALINA_HOME/webapps/lsearch/WEB-INF/solr_home"
    export SOLR_LOG="$CATALINA_HOME/logs/"
    export TOMCAT_USER="tomcat"
    export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=$SOLR_HOME -Dsolr.solr.log.dir=$SOLR_LOG -Dbootstrap_conf=true -DhostContext=lsearch"

配置solr.home 和solr.log,這樣就不需要在web.xml中寫死了。


2.修改classes中的log4j.properties 中的solr.log ,這樣在tomcat 啟動引數 就可以設定solr log了

    solr.log=${catalina.base}/logs

3.與單機版solr不同,不需要在web.xml中開啟 env標籤配置 solr home,在tomcat的啟動引數中設定solr home就可以

4.整合了 ik分詞器,將ik的jar包 放在了WEB-INF的lib中,lib同級配置了ik的配置檔案

5.solr的jar包 在maven的pom中進行了配置。不需要像單機中的copy jar包。
複製程式碼

二,使用說明

1.mvn clean install 打包,打成的war包 放到tomcat的webapps下 ,增加setenv.sh 檔案,執行bin下的指令碼。

./startup.sh
http://localhost:8081/lsearch/index.html
複製程式碼

2.idea配置tomcat,deployment 中deploy Artifact war 包,啟動tomcat後 訪問 url可以直接訪問。

http://localhost:8081/lsearch/index.html

三,測試資料

四,遇到的坑

1.solr.home 需要絕對路徑寫死,不靈活不太好,多次查詢之後,修改tomcat的啟動引數

-Dsolr.solr.home=$SOLR_HOME
複製程式碼

2.solr.log. permisson問題

log4j.properties 中的solr.log的目錄沒有對應,可以寫死絕對路徑,這裡在tomcat的啟動引數中增加
    export SOLR_LOG="$CATALINA_HOME/logs/"
	-Dsolr.solr.log.dir=$SOLR_LOG 
複製程式碼

3.tomcat 啟動引數的測試

(1)jps -v 檢視jvm的引數
(2)tomcat的bin檔案下,新建setenv.sh 裡面設定jvm引數,之後用startup.sh 啟動
複製程式碼
  1. 404錯誤
solr 各種會遇到404的問題,注意檢視solr.log , catalina.out ,localhost.xxx.log 中的錯誤
(1)嚴重: Exception starting filter SolrRequestFilter    java.lang.NoClassDefFoundError: com/codahale/metrics/MetricSet
	解決:缺少metrics 等jar包
	
(2)web.xml 中的 <security-constraint> 注掉
(3)
複製程式碼

相關文章