sphinx 簡介以及安裝 以及php擴充開啟

weixin_34126215發表於2015-07-28

一 sphinx 簡介  

      在 使用mysql資料庫過程中,如果想實現全文檢索的優化,可以使用mysql自帶全文索引,但是不支援中文。。關於sphinx的安裝網上很多教程寫的都 不錯比如:http://www.coreseek.cn/products-install/。這裡就不再說明安裝方法了。有興趣的可以自己參考。

     MySQL在高併發連線、資料庫記錄數較多的情況下,SELECT ... WHERE ... LIKE '%...%'的全文搜尋方式不僅效率差,而且以萬用字元%和_開頭作查詢時,使用不到索引,需要全表掃描,對數據庫的壓力也很大。MySQL針對這一問題提供了一種全文索引解決方案,這不僅僅提高了效能和效率(因為MySQL對這些欄位做了索引來優化搜尋),而且實現了更高質量的搜尋。但是,至今為止,MySQL對中文全文索引無法正確支援。

可 以使用Sphinx(一種全文檢索引擎)技術,Sphinx預設不支援中文索引及檢索。以前用Coreseek的補丁來解決,目前Coreseek 不單獨提供補丁檔案,而基於sphinx開發了Coreseek 全文檢索伺服器,Coreseek應該是現在用的最多的sphinx中文全文檢索,它提供了為Sphinx設計的中文分詞包LibMMSeg包含 mmseg中文分詞。

 

Sphinx的基本原理與檢索流程

這種檢索流程使用sphinx官方為我們提供的API檔案(php使用sphinxapi.php),首先php通過這個api連線sphinx伺服器,獲取查詢結果的id資訊,然後再通過這些id從mysql資料庫中 取得相關的資料。

SphinxSE -- 基於Sphinx儲存引擎檢索(以後再詳細介紹)

 

二、  Sphinx安裝

Sphinx在mysql上的應用有兩種方式:

  1. 採用API呼叫,如使用PHP、java等的API函式或方法查詢。優點是可不必對mysql重新編譯,服務端程式“低耦合”,且程式可靈活、方便的呼叫;缺點是如已有搜尋程式的條件下,需修改部分程式。推薦程式設計師使用。
  2. 使用外掛方式(sphinxSE)把sphinx編譯成一個mysql外掛並使用特定的sql語句進行檢索。其特點是,在sql端方便組合,且能直接返回資料給客戶端。不必二次查詢,在程式上僅需要修改對應的sql,但這對使用框架開發的程式很不方便,比如使用了ORM。另外還需要對mysql進行重新編譯,且需要mysql-5.1以上版本支援外掛儲存。

這裡的安裝主要介紹的是第一種通過api呼叫的方式。Sphinx的安裝如下:

#下載最新穩定版  該方式不支援中文分詞
wget http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz
tar xzvf sphinx-0.9.9.tar.gz
cd sphinx-0.9.9
./configure --prefix=/usr/local/sphinx/   --with-mysql  --enable-id64
make
make install

 

三、  Sphinx中文分詞

中文的全文檢索和英文等latin系列不一樣,後者是根據空格等特殊字元來斷詞,而中文是根據語義來分詞。中文分詞主要有2個外掛

  1. Coreseek

Coreseek是現在用的最多的sphinx中文全文檢索,它提供了為Sphinx設計的中文分詞包LibMMSeg ,是基於sphinx的基礎上開發的

        2.sfc(Sphinx-for-chinese)

sfcsphinx-for-chinese是由網友happy兄提供的另外一箇中文分詞外掛。其中文詞典採用的是xdict

四 、安裝sphinx 中文分詞

  1. 安裝升級autoconf

因為coreseek需要autoconf 2.64以上版本,因此需要升級autoconf,不然會報錯,安裝方法如下:

tar -jxvf autoconf-2.64.tar.bz2
cd autoconf-2.64
./configure
make
make install
  1. 下載coreseek

新版本的coreseek將詞典和sphinx源程式放在了一個包中,因此只需要下載coreseek包就可以了。下載連結 http://www.coreseek.cn/

  1. 安裝mmseg(coreseek所使用的詞典)
tar zxvf coreseek-4.1-beta.tar.gz 
cd coreseek-4.1-beta/
cd mmseg-3.2.14/
./bootstrap   #注意一點要執行該操作 不然編譯csft會報錯 
./configure --prefix=/usr/local/mmseg
make&&make install

 

  1. 安裝coreseek(sphinx)

cd csft-3.2.14

 cd  csft-4.1/
sudo ./buildconf.sh   #執行該項shell 指令碼  生成 配置檔案 
sudo ./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ --with-mysql
make &&make install

##編譯該檔案比較浪費時間
make[2]:正在離開目錄 `/usr/local/src/coreseek-4.1-beta/csft-4.1/doc'
make[1]:正在離開目錄 `/usr/local/src/coreseek-4.1-beta/csft-4.1/doc'
make[1]: 正在進入目錄 `/usr/local/src/coreseek-4.1-beta/csft-4.1'
make[2]: 正在進入目錄 `/usr/local/src/coreseek-4.1-beta/csft-4.1'
test -z "/usr/local/coreseek/etc" || mkdir -p -- "/usr/local/coreseek/etc"
 /usr/bin/install -c -m 644 'sphinx.conf.dist' '/usr/local/coreseek/etc/sphinx.conf.dist'
 /usr/bin/install -c -m 644 'sphinx-min.conf.dist' '/usr/local/coreseek/etc/sphinx-min.conf.dist'
 /usr/bin/install -c -m 644 'example.sql' '/usr/local/coreseek/etc/example.sql'
make  install-data-hook
make[3]: 正在進入目錄 `/usr/local/src/coreseek-4.1-beta/csft-4.1'
mkdir -p /usr/local/coreseek/var/data && mkdir -p /usr/local/coreseek/var/log
make[3]:正在離開目錄 `/usr/local/src/coreseek-4.1-beta/csft-4.1'
make[2]:正在離開目錄 `/usr/local/src/coreseek-4.1-beta/csft-4.1'
make[1]:正在離開目錄 `/usr/local/src/coreseek-4.1-beta/csft-4.1

 

常遇到的問題 比如   擷取自其他人的網站:

1 如果你的gcc>=4.7安裝的過程中:會make編譯不通過,提示: error: ‘ExprEval’ was not declared in this scope    這個是從別人的網站上邊扒下來的:  具體還不知道什麼意思

 是關於coreseek上游的sphinx的同樣問題的,看了一下了解似乎是gcc 4.7、gcc 4.8的C++作用域的問題(?),上面的debian bugs裡面提供了一個patch,看了下patch的內容,也對自己本地的coreseek的製作了同樣的補丁,壓縮包釋出如下,使用時注意版本:

解壓後,用sphinxexpr.cpp覆蓋coreseek-4.1-beta/csft-4.1/src下的同名檔案重新編譯即可

2 編譯時提示:tokenizer_zhcn.h:26:30: error: SegmenterManager.h
該問題說明編譯mmseg的時候,沒有執行:$ ./bootstrap    檢視詳細的編譯 步驟

五、測試coreseek 中文

六、開啟sphinx php 擴充 

1、首先下載擴充模組 :http://pecl.php.net/package/sphinx

 tar zxvf sphinx-1.3.3.tgz
cd sphinx-1.3.3
locate phpize
/usr/local/php/bin/phpize
locate php-config
./configure --with-php-config=/usr/local/php/bin/php-config  --with-sphinx

 

 執行./configure  提示錯誤   configure: error: Cannot find libsphinxclient headers 

#解決方法:
cd coreseek-4.1/csft-4.1/api/libsphinxclient/
./configure --prefix=/usr/local/libsphinxclient
sudo make && make install

 

還有可能會出現問題  config.status: error: cannot find input file: Makefile.in

#config.status: error: cannot find input file: src/Makefile.in
#網上找到的解決辦法
aclocal
libtoolize --force
automake --add-missing
autoconf
autoheader
make clean

 

解決完成以上問題之後執行

./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx=/usr/local/libsphinxclient
make&&make install
vi /etc/php5/cli/php.ini
#新增資訊
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20131226/"
extension=memcache.so
extension=redis.so
;extension=opcache.so
extension=mongo.so
extension=sphinx.so #新增該選項

 

重啟 apache 或者nginx  檢視 phpinfo 是不是含有該項擴充。

 

相關文章