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


前言:

原文地址:

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來訪問搜索結果,封裝接口提供給前端調用。^_^


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM