一、定義
官網的定義:
Solr是基於Lucene構建的流行,快速,開放源代碼的企業搜索平台。它具有高度的可靠性,可伸縮性和容錯能力,可提供分布式索引,復制和負載平衡查詢,自動故障轉移和恢復,集中式配置等。 Solr支持許多世界上最大的互聯網站點的搜索和導航功能。
簡單的理解solr就是一款搜索框架,通常用實現查詢功能,比如電商網站的商品檢索。
二、環境搭建
本文基於以下開源組件版本搭建,約定下載后組件和解壓縮的文件都放置在/opt目錄下:
-
solr-8.2.0
-
apache-tomcat-8.5.47
首先下載solr-8.2.0.tgz,可以使用wget命令:
wget http://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/8.2.0/solr-8.2.0.tgz
解壓縮:
tar -zxvf solr-8.2.0.tgz -C .
解壓后,/opt目錄下會多一個solr-8.2.0目錄
下載apache-tomcat-8.5.47:
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz
解壓縮:
tar -zxvf apache-tomcat-8.5.47.tar.gz
為了將solr部署到tomcat服務器,不使用solr自帶的jetty,首先在/opt目錄下創建一個目錄用於部署solr服務,名稱無限制,這里取名solr
了。
mkdir solr
復制一份tomcat到/opt/solr
目錄下,重命名為tomcat8
cp -r apache-tomcat-8.5.47 solr/tomcat8
solr本質是一個web服務,我們將它復制到tomcat8下:
cp -r solr-8.2.0/server/solr-webapp/webapp solr/tomcat8/webapps/solr
復制solr-8.2.0/server/lib/ext下的部分jar到solr目錄中,為了簡便可以完全復制所有的,然后忽略掉disruptor-3.4.2.jar
cp solr-8.2.0/server/lib/ext/* solr/tomcat8/webapps/solr/WEB-INF/lib/
復制solr-8.2.0/server/lib下以metrics開頭的jar到solr目錄:
cp solr-8.2.0/server/lib/metrics* solr/tomcat8/webapps/solr/WEB-INF/lib/
上面這兩項注意是復制到solr服務的lib目錄下,不是復制到tomcat8/lib下。
復制solr-8.2.0/server/resources下的log4j*.xml文件到solr
首先在solr創建classes目錄:
mkdir solr/tomcat8/webapps/solr/WEB-INF/classes
復制日志配置文件:
cp solr-8.2.0/server/resources/log4j2*.xml solr/tomcat8/webapps/solr/WEB-INF/classes/
將solr-8.2.0/server/solr目錄復制到solr/目錄下,並重命名為solrhome:
cp -r solr-8.2.0/server/solr solr/solrhome
修改日志路徑
vim solr/tomcat8/webapps/solr/WEB-INF/classes/log4j2.xml
指定fileName和filePattern的路徑:
<RollingRandomAccessFile
name="MainLogFile"
fileName="/opt/solr/solrhome/log/solr.log"
filePattern="/opt/solr/solrhome/log/solr.log.%i" >
<PatternLayout>
....
關聯solr及solrhome
修改solr里的web.xml文件
vim solr/tomcat8/webapps/solr/WEB-INF/web.xml
web.xml中<web-app></web-app>標簽內
添加如下配置,指定sorlhome路徑
<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>
注釋掉下方的下列配置:
<!--
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
</web-resource-collection>
</security-constraint>
-->
最后啟動tomcat,訪問服務器的solr服務:
sh solr/tomcat8/bin/start.sh
訪問地址:
localhost:8080/solr/index.html
三、配置IK分詞器
首先從IK分詞器下載與solr版本匹配的jar包,並放置在solr服務的lib目錄下,
cp ik-analyzer-8.2.0.jar solr/tomcat8/webapps/solr/WEB-INF/lib/
在solr/solrhome/下創建目錄test_core,拷貝配置文件到test_core中:
cp -r solr/solrhome/configsets/sample_techproducts_configs/conf/ solr/solrhome/test_core/
修改conf中的solr.xml文件,修改jar路徑:
<lib dir="${solr.install.dir:../}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="${solr.install.dir:../}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-ltr-\d.*\.jar" />
<lib dir="${solr.install.dir:../}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-velocity-\d.*\.jar" />
修改managed-schema文件,添加ik分詞器配置:
<!-- ik分詞器 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
重啟solr服務,打開管理界面,添加test_core:
打開管理界面,分詞示例: