一 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 是否是含有该项拓展。
。