• sphinx 简介以及安装 以及php拓展开启


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

  • 相关阅读:
    Jmeter设计压力测试场景&请求元件之并发场景设置&Jmeter查看压力测试结果&压力测试结果分析(二十九)
    Jmeter录制APP脚本(二十八)
    Jmeter优化web脚本&Jmeter回放web脚本和联调&Jmeter WEB脚本参数化(二十七)
    Jmeter结合badboy录制脚本(二十六)
    Jmeter录制WEB的原理(二十五)
    Jmeter实践:一粒云项目—Jmeter获取文件列表与下载接口串联测试及上传文件与下载接口之间的串联测试(二十四)
    Jmeter实践:一粒云项目—Jmeter完成文件的列表获取及JSON Extractor获取数组类型的数据及正则表达式获取数组类型的数据(二十三)
    Jmeter实践:一粒云项目—Jmeter完成文件下载及批量完成文件下载(二十二)
    Jmeter实践:一粒云项目—Jmeter完成文件上传及批量完成文件上传(二十一)
    Jmeter实践——新的项目介绍(二十)
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/4681656.html
Copyright © 2020-2023  润新知