天天看點

Solr搜尋引擎 — 兩種安裝方式

常常在業務開發中會遇到大清單的查詢需求或者按照各項條件搜尋内容,一般的做法往往都是資料庫直接搞定,但是到了一定的程度隻有這類需求會帶來巨大的開銷,一個表格中涉及到了5張表的資料,搜尋要求從其中3張表的不同字段做到模糊查詢,如果還用傳統的方式實作起來就很有難度了邏輯和資料庫性能就是一個考驗,要是如果在A表一個字段是很長的text需要模糊比對,在B表需要用簡拼音搜尋,那就難上加難了,solr恰巧就解決了這些問題。

附上:

喵了個咪的部落格:

http://w-blog.cn Solr官網: http://lucene.apache.org/solr/

PS:8.0.0版本已經釋出,本文使用此時較為穩定的7.7.1版本

一,Solr對比Elasticsearch

一般要提到索引運用比較多的自然是ES,有着良好的性能,

Sola特點:

  • 通過zookeeper進行叢集管理
  • 支援豐富的資料源,可以直接使用mysql作為資料源
  • 和hadoop生态結合較好,可以索引檔案直接落入hdfs可以實作無限擴容
  • 自帶查詢功能強大,新手都能很容易上手

Elasticsearch特點:

  • 效率快,自帶一些圖表分析的功能
  • restful的查詢方式
  • 可以通過Logstash來支援mysql資料源

Solr和Elasticsearch主要差別:

  • Solr原生支援mysql資料源,ES需要Logstash來擴充支援(雖然都是一家的産品)
  • Elasticsearch在資料量較多的情況下速度比Solr快
  • 資料源Solr支援的更好,ES隻支援json資料源
  • 叢集上SolrCloud比較ES簡單
  • 分詞上都支援中文和拼音分詞
  • Solr webUI更友善觀察服務運作情況和調試索引

二、環境準備和solr啟動

安裝tomcat和jdk1.8

> wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --tomcat_option 2 --jdk_option 2 --reboot            

下載下傳solr配置好環境變量

> mkdir /app/install && cd /app/install
> wget http://mirrors.shu.edu.cn/apache/lucene/solr/7.7.1/solr-7.7.1.tgz
> tar -zxvf solr-7.7.1.tgz
> mv solr-7.7.1 /usr/local/
> vim /etc/profile

export PATH=/usr/local/solr-7.7.1/bin:$PATH

> source /etc/profile           

啟動solr

> solr start

WARNING: Starting Solr as the root user is a security risk and not considered best practice. Exiting.
         Please consult the Reference Guide. To override this check, start with argument '-force'

> solr start -force

Waiting up to 180 seconds to see Solr running on port 8983 [\]  
Started Solr server on port 8983 (pid=8773). Happy searching!           
PS:Solr自帶jetty可以不依賴tomcat直接啟動

通過通路8983端口就可以進入到webui

三、配置tomcat啟動solr

雖然直接啟動也可以,但是通過tomcat的方式更加可控為了後續的叢集配置也更加推薦。

PS:通過oneinstack安裝的tomcat的根目錄在/wwwroot/default>下面

在tomcat包下的webapps目錄建立一個目錄,取名solr

> cd /data/wwwroot/default
> mkdir solr           
  • 将solr解壓包/solr-7.7.1/server/solr-webapp/webapp/下的内容拷貝到剛才tomcat下建立的檔案夾solr中
  • 将/solr-7.7.1/server/lib/ext/下的jar包拷貝到/tomcat/webapps/solr/WEB-INF/lib/下
  • 将/solr-7.7.1/server/lib/下metrics開頭的jar包也拷貝到剛才的目錄下
  • 将/solr-7.7.1/dist/下 solr-dataimporthandler-extras-7.7.1.jar、solr-dataimporthandler-7.7.1.jar也拷貝到剛才的目錄下
> cp -rf /usr/local/solr-7.7.1/server/solr-webapp/webapp/* /data/wwwroot/default/solr
> cp -rf /usr/local/solr-7.7.1/server/lib/ext/* /data/wwwroot/default/solr/WEB-INF/lib
> cp -rf /usr/local/solr-7.7.1/server/lib/metrics-* /data/wwwroot/default/solr/WEB-INF/lib
> cp -rf /usr/local/solr-7.7.1/dist/solr-dataimporthandler-extras-7.7.1.jar /data/wwwroot/default/solr/WEB-INF/lib
> cp -rf /usr/local/solr-7.7.1/dist/solr-dataimporthandler-7.7.1.jar /data/wwwroot/default/solr/WEB-INF/lib           
  • 在你本地的/home下建立一個檔案夾,取名solr-home,将/solr-7.7.1/server/solr下的内容拷貝到剛才建立的solr-home下
> mkdir /home/solr-home
> cp -rf /usr/local/solr-7.7.1/server/solr/* /home/solr-home/           
  • 打開并編輯/tomcat/webapps/solr/WEB-INF/web.xml并且注釋檔案末尾的所有 元素節點
> vim /data/wwwroot/default/solr/WEB-INF/web.xml

<env-entry>
      <env-entry-name>solr/home</env-entry-name>
      <env-entry-value>/home/solr-home</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>
-->           

配置solr日志(可選)

将/solr-7.7.1/server/resources/下的log4j2.xml檔案拷貝到solr/WEB-INF/classes/下,如果沒有則自己建立一個。

分别給予權限

> chown -R www:www /home/solr-home/
> chown -R www:www /data/wwwroot/default/solr/           

通路對應端口即可

http://172.16.2.75:8080/solr/index.html#/