程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> 使用PHP+Sphinx建立高效的站內搜索引擎

使用PHP+Sphinx建立高效的站內搜索引擎

編輯:PHP基礎知識
 

1.    為什麼要使用Sphinx

 

假設你現在運營著一個論壇,論壇數據已經超過100W,很多用戶都反映論壇搜索的速度非常慢,那麼這時你就可以考慮使用Sphinx了(當然其他的全文檢索程序或方法也行)。

 

2.    Sphinx是什麼

 

Sphinx由俄羅斯人Andrew Aksyonoff 開發的高性能全文搜索軟件包,在GPL與商業協議雙許可協議下發行。

全文檢索是指以文檔的全部文本信息作為檢索對象的一種信息檢索技術。檢索的對象有可能是文章的標題,也有可能是文章的作者,也有可能是文章摘要或內容。

 

3.    Sphinx的特性

 

l  高速索引 (在新款CPU上,近10 MB/秒);

l  高速搜索 (2-4G的文本量中平均查詢速度不到0.1秒);

l  高可用性 (單CPU上最大可支持100 GB的文本,100M文檔);

l  提供良好的相關性排名

l  支持分布式搜索;

l  提供文檔摘要生成;

l  提供從MySQL內部的插件式存儲引擎上搜索

l  支持布爾,短語, 和近義詞查詢;

l  支持每個文檔多個全文檢索域(默認最大32個);

l  支持每個文檔多屬性;

l  支持斷詞;

l  支持單字節編碼與UTF-8編碼;

 

4.    下載並安裝Sphinx

 

打開網址http://www.coreseek.cn/news/7/52/ 找到適合自己的操作系統的版本,比如我是Windows那麼我就可以下載Coreseek Win32通用版本,Linux下可以下載源碼包,自己編譯安裝。這裡解釋下為什麼我們下載的程序叫Coreseek,Coreseek是基於Sphinx開發的一款軟件,對Sphinx做了一些改動,在中文方面支持得比Sphinx好,所以我們使用之。

下載完成後,將程序解壓到你想解壓的地方,比如我就想解壓到E盤根目錄,之後修改目錄名為Coreseek,大功告成Coreseek安裝完成了,安裝的目錄是在E:\coreseek\。

 

5.    使用Sphinx

 

我要使用Sphinx需要做以下幾件事

1)        首先得有數據

2)        建立Sphinx配置文件

3)        生成索引

4)        啟動Sphinx

5)        使用之(調用api或search.exe程序進行查詢)

 

第1件:(導入數據)

我們建立測試所需要用到得數據庫、表以及數據,篇幅有限,這些在附件中都有,下載後導入MySQL即可。

 

第2件:(建立配置文件)

接下來我們需要建立一個Sphinx的配置文件 E:\coreseek\etc\mysql.conf,將其內容改為下面這些:

source mysql

{

       type                                         = mysql

       sql_host                                    = localhost 

       sql_user                                    = root          

       sql_pass                                          =           

       sql_db                                      = test           

       sql_port                                    = 3306         

       sql_query_pre                         = SET NAMES utf8

       sql_query                                 = SELECT id,addtime,title,content FROM post

       sql_attr_timestamp                 = addtime

}

 

index mysql

{

       source                                      = mysql

       path                                         = E:/coreseek/var/data/mysql

       charset_dictpath                   = E:/coreseek/etc/

       charset_type                           = zh_cn.utf-8

}

 

searchd

{

       listen                                         = 9312

       max_matches                         = 1000

       pid_file                                     = E:/coreseek/var/log/searchd_mysql.pid

       log                                            = E:/coreseek/var/log/searchd_mysql.log

       query_log                                = E:/coreseek/var/log/query_mysql.log

}

 

先講下這個配置文件中每項的含義。

source mysql{} 定義源名稱為mysql,也可以叫其他的,比如:source xxx{}

type  數據源類型

sql_* 數據相關的配置,比如sql_host,sql_pass什麼的,這些不解釋鳥

sql_query 建立索引時的查詢命令,在這裡盡可能不使用where或group by,將where與groupby的內容交給sphinx,由sphinx進行條件過濾與groupby效率會更高,注意:select 的字段必須包括一個唯一主鍵以及要全文檢索的字段,where中要用到的字段也要select出來

sql_query_pre 在執行sql_query前執行的sql命令, 可以有多條

sql_attr 以這個開頭的配置項,表示屬性字段,在where,orderby,groupby中出現的字段要分別定義一個屬性,定義不同類型的字段要用不同的屬性名,比如上面的sql_attr_timestamp就是時間戳類型。

 

index mysql{} 定義索引名稱為mysql,也可以叫其他的,比如:index xxx{}

source 關聯源,就是source xxx定義的。

path 索引文件存放路徑,比如:E:/coreseek/var/data/mysql 實際存放在E:/coreseek/var/data/目錄,然後創建多個名稱為mysql後綴卻不同的索引文件

charset_dictpath  指明分詞法讀取詞典文件的位置,當啟用分詞法時,為必填項。在使用LibMMSeg作為分詞 庫時,需要確保詞典文件uni.lib在指定的目錄下

charset_type 字符集,比如charset_type = zh_cn.gbk

 

searchd{} sphinx守護進程配置

listen 監聽端口

max_matches最大匹配數,也就是查找的數據再多也只返回這裡設置的1000條

pid_file pid文件路徑

log全文檢索日志

query_log查詢日志

 

好了,配置文件就這樣,配置的參數還有很多,大家可以自己查文檔。

   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved