一 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
Sphinx在mysql上的應用有兩種方式:sql
這裏的安裝主要介紹的是第一種經過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
中文的全文檢索和英文等latin系列不同,後者是根據空格等特殊字符來斷詞,而中文是根據語義來分詞。中文分詞主要有2個插件數據庫
Coreseek是如今用的最多的sphinx中文全文檢索,它提供了爲Sphinx設計的中文分詞包LibMMSeg ,是基於sphinx的基礎上開發的
2.sfc(Sphinx-for-chinese)
sfc(sphinx-for-chinese)是由網友happy兄提供的另一箇中文分詞插件。其中文詞典採用的是xdict。
四 、安裝sphinx 中文分詞
由於coreseek須要autoconf 2.64以上版本,所以須要升級autoconf,否則會報錯,安裝方法以下:
tar -jxvf autoconf-2.64.tar.bz2 cd autoconf-2.64 ./configure make make install
新版本的coreseek將詞典和sphinx源程序放在了一個包中,所以只須要下載coreseek包就能夠了。下載連接 http://www.coreseek.cn/
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
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 是否是含有該項拓展。
。