一 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..tar.gz
cd sphinx-0.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./
./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..tgz
cd sphinx-1.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 是不是含有该项拓展。

sphinx 简介以及安装 以及php拓展开启的更多相关文章

  1. 时序数据库InfluxDB:简介及安装

    在性能测试过程中,对测试结果以及的实时监控与展示也是很重要的一部分.这篇博客,介绍下linux环境下InfluxDB的安装以及功能特点. 官网地址:influxdata 官方文档:influxdb文档 ...

  2. VMware vSphere 5.1 简介与安装

    虚拟化系列-VMware vSphere 5.1 简介与安装  标签: 虚拟化 esxi5.1 VMware vSphere 5.1 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...

  3. [转载]【虚拟化系列】VMware vSphere 5.1 简介与安装

    转载自:http://mabofeng.blog.51cto.com/2661587/1017680 一. VMware vSphere 5.1简介           vSphere是VMware推 ...

  4. Redis系列(一):Redis的简介与安装

    原文链接(转载请注明出处):Redis系列(一):Redis的简介与安装 什么是 Redis Redis 是一个使用ANSI C 编写的开源.支持网络协议.基于内存.可选持久性的键值对数据库,它是一个 ...

  5. 【虚拟化系列】VMware vSphere 5.1 简介与安装

    一. VMware vSphere 5.1简介           vSphere是VMware推出的基于云计算的新一代数据中心虚拟化套件,提供了虚拟化基础架构.高可用性.集中管理.监控等一整套解决方 ...

  6. RabbitMQ详解(一)------简介与安装(Docker)

    RABBITMQ详解(一)------简介与安装(DOCKER) 刚刚进入实习,在学习过程中没有接触过MQ,RabbitMQ 这个消息中间件,正好公司最近的项目中有用到,学习了解一下. 首先什么是MQ ...

  7. 虚拟化系列-VMware vSphere 5.1 简介与安装

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mabofeng.blog.51cto.com/2661587/1017680 一 ...

  8. redis简介、安装、配置和数据类型

    redis简介.安装.配置和数据类型 redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理. 它支持字符串.哈希表.列表.集合.有序集合, ...

  9. Docker简介与安装

    简介与安装 简介 Docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的 ...

随机推荐

  1. 回某位朋友问题备受phpcgi.exe煎熬现在cpu跑满(解决方案)

    (本文原创,但是cgi参数参考一个大神写的针对小服务器的,希望大家积极投票哦) 下面是对php-cgi.ext过多引起服务器cup%的解决方法,希望对大家有帮助;大多数情况是发生在第四项上;   解决 ...

  2. Windows 10 Technical Preview 10041 使用 IIS Express 运行网站应用程序异常

    在 Windows 10 中使用 Visual Studio 2013 Ultimate with Update 4 开发网站,9926 的时候还好好的,升到 10041 就不能调试了: “Syste ...

  3. Android UI学习 - GridView和ImageView的使用

    GridView: A view that shows items in two-dimensional scrolling grid. The items in the grid come from ...

  4. poj3252 Round Numbers

    Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7625   Accepted: 2625 Des ...

  5. 史上最简单的带流控功能的http server

    s.py import time import SimpleHTTPServer import SocketServer BYTES_PER_SECOND=160*1024 class MyHTTPR ...

  6. mybatis0208 缓存

    查询缓存 1.1缓存的意义 数据在磁盘会有一个IO,高并发读取效率就很低,将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效 ...

  7. httpd cgi程序配制+.py .cgi执行

     vi /etc/httpd/conf/httpd.conf httpd默认首页配制: DirectoryIndex index.html index.html.var 首页的位置定义: Docume ...

  8. [转] ReactNative Animated动画详解

    http://web.jobbole.com/84962/     首页 所有文章 JavaScript HTML5 CSS 基础技术 前端职场 工具资源 更多频道▼ - 导航条 - 首页 所有文章 ...

  9. 第五篇:python基础之循环结构以及列表

    python基础之循环结构以及列表   python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.pyth ...

  10. @ManyToMany中间表附加字段设计

    在使用@ManyToMany时,若中间表只有相应的外键字段可以直接建立两个对应的Entity 设置ManyToMany @ManyToMany 两个表多对多关联 但若是中间表有自己的附加字段,这需要为 ...