常常在業務開發中會遇到大列表的查詢需求或者按照各項條件搜索內容,一般的做法往往都是數據庫直接搞定,但是到了一定的程度只有這類需求會帶來巨大的開銷,一個表格中涉及到了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的根目錄在</data/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#/