sphinx 簡介以及安裝 以及php拓展開啓

一 sphinx 簡介   php

      在 使用mysql數據庫過程當中,若是想實現全文檢索的優化,可使用mysql自帶全文索引,可是不支持中文。。關於sphinx的安裝網上不少教程寫的都 不錯好比:http://www.coreseek.cn/products-install/。這裏就再也不說明安裝方法了。有興趣的能夠本身參考。java

     MySQL在高併發鏈接、數據庫記錄數較多的狀況下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不只效率差,並且以通配符%和_開頭做查詢時,使用不到索引,須要全表掃描,對數據庫的壓力也很大。MySQL針對這一問題提供了一種全文索引解決方案,這不只僅提升了性能和效率(由於MySQL對這些字段作了索引來優化搜索),並且實現了更高質量的搜索。可是,至今爲止,MySQL對中文全文索引沒法正確支持。mysql

可 以使用Sphinx(一種全文檢索引擎)技術,Sphinx默認不支持中文索引及檢索。之前用Coreseek的補丁來解決,目前Coreseek 不單獨提供補丁文件,而基於sphinx開發了Coreseek 全文檢索服務器,Coreseek應該是如今用的最多的sphinx中文全文檢索,它提供了爲Sphinx設計的中文分詞包LibMMSeg包含 mmseg中文分詞。linux

 

Sphinx的基本原理與檢索流程nginx

這種檢索流程使用sphinx官方爲咱們提供的API文件(php使用sphinxapi.php),首先php經過這個api鏈接sphinx服務器,獲取查詢結果的id信息,而後再經過這些id從mysql數據庫中 取得相關的數據。程序員

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

 

2、  Sphinx安裝

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

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

這裏的安裝主要介紹的是第一種經過api調用的方式。Sphinx的安裝以下:shell

#下載最新穩定版  該方式不支持中文分詞
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

 

3、  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.七、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    查看詳細的編譯 步驟

5、測試coreseek 中文

6、開啓sphinx php 拓展 

一、首先下載拓展模塊 :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 是否是含有該項拓展。

相關文章
相關標籤/搜索