PHP-從零開始使用Solr搜尋引擎服務(上)

流火行者發表於2017-07-12

前言:

原文地址:

http://www.cnblogs.com/JimmyBright/p/7156069.html

使用搜尋引擎,我們常規的資料查詢會快很多,還可以對關鍵詞進行中文分詞查詢,返回一些高亮,就和我們每天使用的搜尋服務一樣。我們這裡要使用Solr來進行我們的搜尋服務搭建。如果你使用php,很可能你會在網上查到Sphinx這個搜尋引擎,說是對php支援的很好,不要遲疑,遠離它,這個尼瑪官網都沒了,已經很多年沒更新了,中文更是沒辦法支援,功能更是非常有限。Solr一直在更新版本,用的人很多,官網http://lucene.apache.org/solr/,可以瞭解詳情。

Solr是一套java寫的獨立搜尋引擎,當然了,如果你不會java,沒有任何關係。

廢話少說,我們先看怎麼在伺服器上安裝支援中文的Solr服務(本文是基於solr最新的6.5+版本),

1:安裝

首先看下伺服器的java環境配置

如果低於1.8,你就要先升級伺服器環境了,這個我就不描述了。

java環境配置完成之後,進入你想要安裝搜尋引擎的目錄,直接在官網下載solr的壓縮包wget https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/6.6.0/solr-6.6.0.tgz

(我前段時間在專案中用的時候還是6.5.1版本,現在已經6.6.0了,我這為了方便還使用6.5.1的案例描述)

下載完成之後解壓目錄是這樣子的

開啟example進入

solr-6.6.0/example/example-DIH/solr

會發現已經幾個demo樣子的目錄

[root@10-10-87-38 solr]# ls
atom db mail solr solr.xml tika
[root@10-10-87-38 solr]#

這裡需要說明一下,這個atom、db、mail等都是單獨的搜尋業務,大的專案裡可能會拆分出像這樣很多的搜尋業務型別。我們複製其中的一個,如mail整個目錄複製到/usr/solr-6.6.0/server/solr,

這個目錄才是搜尋引擎最終的查詢目錄,所有搜尋的配置以及資料庫的索引等都在這個目錄下,mail 下的檔案結構是這樣的

[root@10-10-87-38 mail]# ls
conf core.properties data
[root@10-10-87-38 mail]#

2:啟動搜尋引擎

 

配置搜尋,只需要關注conf就可以了,開啟conf

[root@10-10-87-38 conf]# ls
admin-extra.html clustering lang mapping-FoldToASCII.txt solrconfig.xml synonyms.txt
admin-extra.menu-bottom.html currency.xml mail-data-config.xml mapping-ISOLatin1Accent.txt spellings.txt update-script.js
admin-extra.menu-top.html elevate.xml managed-schema protwords.txt stopwords.txt xslt
[root@10-10-87-38 conf]#

這時候應該就可以啟動一個空的搜尋服務了。

進入Solr的根目錄

[root@10-10-87-38 bin]# ls
init.d install_solr_service.sh oom_solr.sh post solr solr.cmd solr.in.cmd solr.in.sh
[root@10-10-87-38 bin]# ./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'
[root@10-10-87-38 bin]# ./solr start -force
Waiting up to 180 seconds to see Solr running on port 8983 [|]
Started Solr server on port 8983 (pid=9757). Happy searching!
[root@10-10-87-38 bin]#

這時候搜尋引擎已經啟動了,你可以在瀏覽器上開啟一個Solr的管理介面,地址框輸入

http://10.10.87.38:8983/solr/#/mail

注意左邊紅色框,下拉框裡會顯示上面你從example裡複製過來的專案,紅框裡有一個Query,就是搜尋關鍵詞用的,你可以在這裡邊測試你的搜尋服務是否正常,具體你可以自己點進去看一看就明白了,當然了,隨便複製過來的mail肯定是不能工作的,因為這個沒有連線到你自己的資料庫。

3:配置Solr

重新回到/solr-6.5.1/server/solr目錄下

我這複製了mail,然後改名字為crm,作為我自己的搜尋模組。下面就要配置這個crm了

進入

/solr-6.5.1/server/solr/crm/conf

[root@10-10-87-38 conf]# ls
admin-extra.html clustering db-data-config.xml managed-schema protwords.txt stopwords.txt xslt
admin-extra.menu-bottom.html currency.xml elevate.xml mapping-FoldToASCII.txt solrconfig.xml synonyms.txt
admin-extra.menu-top.html dataimport.properties lang mapping-ISOLatin1Accent.txt spellings.txt update-script.js
[root@10-10-87-38 conf]#

配置db-data-config.xml

 

這個是配置資料庫的,由於我這使用的mysql,然後要搜尋的只有一張表,所以配置就比較簡單了

你要搜尋很多表的話,就配置多個entity,(我這業務上沒這需求,我們們沒研究這塊)這個配置是讓solr對資料庫的欄位內容建立索引並儲存下來,搜尋的時候不再查詢資料庫,直接查詢索引返回結果

配置solrconfig.xml

這個是solr本身的配置,基本包含高亮顯示,返回欄位長短,查詢超時設定等等,如果不做高階定製,這個檔案基本不用動,唯一要注意的是

<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>

配置managed-schema

這個檔案很重要了,你可以在這裡配置你要搜尋的欄位的屬性,這裡面你會看到很多的field節點,看一下就會知道怎麼設定了。

4:配置中文搜尋

預設的是不支援中文搜尋的,我們還要新增中文的jar包

網上搜尋一下ik-analyzer,下載ik中文分詞包放在lib資料夾下

[root@10-10-87-38 solr]# cd crm/
[root@10-10-87-38 crm]# ls
conf core.properties data lib
[root@10-10-87-38 crm]# cd lib
[root@10-10-87-38 lib]# ls
IKAnalyzer.cfg.xml ext.dic ik-analyzer-solr5-5.x.jar solr-analyzer-ik-5.1.0.jar
derby-10.9.1.0.jar hsqldb-1.8.0.10.jar mysql-connector-java-5.1.42.jar stopword.dic
[root@10-10-87-38 lib]# pwd
/solr-6.5.1/server/solr/crm/lib
[root@10-10-87-38 lib]#

分詞包裝好後要返回到managed-schema配置中文分詞的支援

在檔案末尾新增節點

然後在你想要搜尋中文的欄位裡新增ik分詞

5:完成Solr

儲存所有修改過的配置,然後重啟Solr服務。再從瀏覽器進入Solr管理介面。

首先我們要驗證一下中文分詞是否配置成功了(中文沒配置成功,我們的搜尋就沒有意義)

像這樣子的,你的中文分詞就配置成功了。

下面就可以測試你的搜尋了

看到這樣的介面就說明Solr的搜尋引擎服務配置完全成功了!

現在可以慶祝第一階段的勝利了。

接下來我們就要使用PHP來訪問搜尋結果,封裝介面提供給前端呼叫。^_^

相關文章