2015年1月剛入職新公司時,項目中有用到了solr,但只搞了一個商品標籤搜索,領導讓我研究一下,把商品的搜索和標籤搜索一塊兒放到solr裏,放兩個核心,當時放兩個核心時折騰了很久,好在搞出來了,當時最新版本是solr-4.10.3,如今更新好多版本了,如今已經從老東家離職,忽然想起那入職第一週歷來沒接觸過這個,並搞定這個環境的安裝,記下這段文字做記念。固然了好多人推薦用elasticsearch作。用什麼作看你本身的想法,看你領導的要求。。好吧,下面是當時的安裝步驟。。。java
須要用到如下的軟件:mysql
solr-4.10.3 zookeeper-3.4.6.tar.gz apache-tomcat-7.0.57web
首先在/opt 目錄下新建 solr_platform (mkdir solr_platform)sql
進入 solr_platform (zookeeper solr tomcat 都安裝在該目錄中)apache
一 zookeeper安裝bootstrap
1 解壓縮zookeeper ———— tar -zxvf zookeeper-3.4.6.tar.gztomcat
2 在solr_platform目錄下新建zookeeper_data和zookeeper_log文件夾(如圖1)所示app
圖1webapp
3 修改配置:每臺機器都複製conf下的zoo_sample.cfg爲zoo.cfg,並在zoo.cfg刪除之前的配置,加現以下配置elasticsearch
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/solr_platform/zookeeper_data
dataLogDir=/opt/solr_platform/zookeeper_log
clientPort=2181
server.1=ip1:2888:3888
#server.2=ip2:2889:3889
#server.3=ip3:2890:3890
注:其中ip一、ip2爲機器的ip,添加前請確保每臺機器的2888和3888端口沒有被佔用。(有多臺機器,server.2,server.3就是其餘機器的zookeeper)
4 而且在zookeeper_data文件夾下新建myid文件,裏面寫一個1(文件沒有後綴名,第二臺機子myid文件裏面寫2,第三臺寫3以此內推)如(圖2)所示
圖2
二 solr安裝
1 首先在solr_platform目錄下新建solr_home_1文件夾
2 解壓縮solr-4.10.3文件,將solr-4.10.3/example/solr全部的東西複製到 solr_home_1
3 新建一個data-config.xml文件,添加以下內容:
<?xml version="1.0" encoding="utf-8"?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.7.154:3306/merchant"
user="wechatadmin"
password="portal!(!)cp"/>
<document>
<entity name="label" pk="id" query="select a.id as id,a.name as name from mer_label a">
<field column="id" name="id" />
<field column="name" name="name" />
</entity>
</document>
</dataConfig>
並將該文件放在/opt/solr_platform/solr_home_1/collection1/conf目錄中 如(圖3)所示
(圖3)
4 修改/opt/solr_platform/solr_home_1/collection1/conf目錄下的solrconfig.xml文件
將以下內容 如(圖4) (圖5)所示
<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:../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
替換爲:
<lib dir="../../contrib/extraction/lib" regex=".*\.jar" />
<lib dir="../../contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../contrib/langid/lib/" regex=".*\.jar" />
<lib dir="../../contrib/velocity/lib" regex=".*\.jar" />
<lib dir="../../dist/" regex=".*\.jar" />
圖4
圖5
在 solrconfig.xml文件<requestHandler name="/select" class="solr.SearchHandler"> 這一行前添加
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
如(圖6)所示
圖6
5將解壓縮的solr-4.10.3目錄下的dist文件夾和contrib都拷貝到/opt/solr_platform/solr_home_1下 如(圖7)所示
圖7
三 solr web端安裝
1解壓tomcat7並其重命名爲tomcat_1,將solr-4.10.3\dist目錄下的solr-4.10.3.war文件解壓到 /opt/solr_platform/tomcat_1/webapps下
注:要手動解壓
2在/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF目錄下新建classes文件夾
複製solr-4.10.3\example\resources目錄下的log4j.properties文件到 /opt/solr_platform/tomcat_1/webapps/classes下(圖8所示)
圖8
3複製solr-4.10.3\example\lib\ext下全部的jar文件到/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF/lib目錄下 (圖9所示)
圖9
4複製solr-4.10.3\dist下的solr-dataimporthandler-4.10.3.jar,solr-dataimporthandler-extras-4.10.3.jar到/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF/lib目錄下
(圖10)所示
5添加一個mysql-connector-java-5.1.20-bin.jar到/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF/lib目錄下(圖11)所示
圖11
6將/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF/web.xml文件
下的
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
改成:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/opt/solr_platform/solr_home_1</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
如(圖12,圖13)所示
圖12
圖13
四 複製/opt/solr_platform/solr_home_1/下的collection1文件夾重命名爲:mycore
(圖14)所示
圖14
1修改/opt/solr_platform/solr_home_1/mycore/conf下的data-config.xml爲
<?xml version="1.0" encoding="utf-8"?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.7.154:3306/merchant"
user="wechatadmin"
password="portal!(!)cp"/>
<document>
<entity name="productname" query="select t.id,t.pro_name,t.label_name,CONVERT(t.audit_status,SIGNED) audit_status,CONVERT(t.publish_status,SIGNED) publish_status from mer_product t left join mer_black_user b ON t.user_id = b.user_id WHERE b.ID IS NULL AND t.audit_status IN (2, 4) AND t.publish_status = 1">
<field column="id" name="id" />
<field column="label_name" name="label_name" />
<field column="pro_name" name="pro_name" />
<field column="publish_status" name="publish_status" />
<field column="audit_status" name="audit_status" />
</entity>
</document>
</dataConfig>
2在/opt/solr_platform/solr_home_1/mycore/conf下schema.xml文件添加
<field name="pro_name" type="string" indexed="true" stored="true"/>
<field name="label_name" type="string" indexed="true" stored="true"/>
<field name="publish_status" type="string" indexed="true" stored="true"/>
<field name="audit_status" type="string" indexed="true" stored="true"/>
3修改/opt/solr_platform/solr_home_1下的solr.xml文件
<solr>
<cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:對應的tomcat端口號}" hostContext="${hostContext:solr}">
<core name="collection1" instanceDir="collection1" />
<core name="mycore" instanceDir="mycore" />
<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
</shardHandlerFactory>
</cores>
</solr>
五tomcat配置信息
1修改/opt/solr_platform/tomcat_1/bin下的catalina.sh文件
添加配置
JAVA_OPTS="-Dsolr.solr.home=/opt/solr_platform/solr_home_1 -Dbootstrap_conf=true -Dcollection.configName=myconftt -DnumShards=2 -DzkHost=zookeeper機器ip:2181"
-DzkHost指向的是zookeeper的址,-Dsolr.solr.home指向的是solr的配置信息,-DnumShards是幾個碎片
六 將上面的tomcat總體複製一份重命名爲tomcat_2,將solr_home_1總體複製一份重命名爲solr_home_2
1 修改/opt/solr_platform/tomcat_2/bin下的catalina.sh文件
JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/opt/solr_platform/solr_home_2 -DzkHost=zookeeper機器ip:2181"
2 修改/opt/solr_platform/tomcat_2/webapps/solr/WEB-INF/web.xml文件
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/opt/solr_platform/solr_home_2</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
七啓動
啓動時,先啓動zookeeper,(bin/zkServer.sh start)
而後啓動tomcat
注:ZooKeeper集羣啓動的時候,每一個結點都試圖去鏈接集羣中的其它結點,先啓動的確定連不上後面還沒啓動的,因此上面日誌前面部分的異常是能夠忽略的。