Sphinx+Mysql+中文分词安装-实现中文全文搜索

时间:2021-04-12 08:19:31

1、什么是Sphinx
Sphinx 是一个在GPLv2 下发布的一个全文检索引擎,商业授权(例如, 嵌入到其他程序中)
需要联系我们(Sphinxsearch.com)以获得商业授权。
一般而言,Sphinx是一个独立的搜索引擎,意图为其他应用提供高速、低空间占用、高结果
相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。
当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式
的XML数据。通过修改源代码,用户可以自行增加新的数据源(例如:其他类型的DBMS
的原生支持)。
搜索API支持PHP、Python、Perl、Rudy和Java,并且也可以用作MySQL存储引擎。搜索
API非常简单,可以在若干个小时之内移植到新的语言上。
Sphinx 是SQL Phrase Index的缩写,但不幸的和CMU的Sphinx项目重名

 

2、Sphinx的特性

  • 高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒);

  • 高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒);

  • 可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可
    处理100 M 文档);

  • 提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;

  • 支持分布式搜索;

  • provides document exceprts generation;

  • 可作为MySQL的存储引擎提供搜索服务;

  • 支持布尔、短语、词语相似度等多种检索模式;

  • 文档支持多个全文检索字段(最大不超过32个);

  • 文档支持多个额外的属性信息(例如:分组信息,时间戳等);

  • 停止词查询;

  • 支持单一字节编码和UTF-8编码;

  • 原生的MySQL支持(同时支持MyISAM 和InnoDB );

  • 原生的PostgreSQL 支持.
  •  

     

    一、安装所需文件mmseg-0.7.3.tar.gz 中文分词
    http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz

    mysql-5.1.26-rc.tar.gz mysql-5.1.26源代码

    sphinx-0.9.8-rc2.tar.gz sphinx-0.9.8-rc2源代码
    http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz

    fix-crash-in-excerpts.patch sphinx支持分词补丁
    http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch

    sphinx-0.98rc2.zhcn-support.patch sphinx支持分词补丁
    http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch

     

    二、开始安装
    1.安装libmmseg

    安装mmseg完成,测试一下

     

     

    有问题可以尝试执行下面命令

     

    2.重新编译mysql
    在安装之前先打两个补丁,这个是支持中文必须打的补丁

     

    3.安装sphinx

     

     

     

     

    官网解决办法:
    In the meantime I've change the configuration file and set
    #define USE_LIBICONV 0 in line 8179.
    修改configure 文件把 #define USE_LIBICONV 0 最后的数值由1改为0
    重新编译。

     

     

    vi configure
    输入/define USE_LIBICONV 找到目标行
    按i键后将1改成0,按esc,输入:wq保存退出

     

      

     

     

     

    4.配置sphinx

     

    修改/usr/local/sphinx/etc/sphinx.conf

     

     

    5.索引建立

     

    装好sphinx后在sphinx的目录中有三个目录 分别为bin etc var
    bin中 存有sphinx用到的一些执行文件 包括 indexer 索引建立 search 查询工具 searchd 查询服务器 等

    为了下面测试方便,我们先将sphinx.conf自带的example.sql脚本倒入的mysql中
    //创建了一个test库,并建立了documents测试表和数据

      

     

    索引的建立方法为

     

    test1为资源名称 不写为默认所有都建立索引
    附:
    建立索引期间可能由于不同版本的数据库导致indexer找不到共享库libmysqlclient.so.16
    需要把/opt/mysql/lib/mysql/libmysqlclient.so.16.0.0 这个文件复制到/usr/lib下 或者作软连接即可

     

    6.查询服务器

    /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf 为开启

    /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf --stop 为关闭

    sphinx的查询 可以大致分为三种

    1 数据库引擎中的查询

    2 通过search工具查询
    /usr/local/sphinx/bin/search --config /usr/local/sphinx/etc/sphinx.conf test

    3 通过php的接口查询 详见sphinxapi.php

     三、在mysql中的使用SphinxSE方式调用Sphinx 1.在mysql中的使用SphinxSE方式调用Sphinx
    首先建立一张索引专用表:
        

    test1:索引的名称,可以在sphinx.conf中查找到
    建立完索引专用表后,我们就可以在mysql中使用它了,例如,在mysql中输入

     

     

     

    运行后,结果记录中将会显示包含doc字符串的所用记录行

    关于query的语法,还有sphinx的配置等信息你可以请参考:
    http://www.sphinxsearch.com/doc.html

     

     

    2.中文分词应用
    生成词典
    进入到mmseg的源代码目录后

     

    在data下边会产生一个文件unigram.txt.uni
    这个就是生成的字典 然后把字典改名为uni.lib放在可以读取的目录中即可

     

     

    修改 sphinx.conf(/usr/local/sphinx/etc/sphinx.conf)配置文件
    在索引中加入

     

     

    (如果searchd已经再运行,先kill 它再运行)
    注意:在添加完数据后,需要重新加载索引,这样新的数据才能被缓存进去
    重建索引,成功后,开启索引监听

     在ide硬盘上建索引的速度

      

    这样,就可以在phpmyadmin中进行测试了。

     

     

    好像没出来。。。。

    修改 sphinx.conf
    去掉下面的注释

     

      

     

    再重启searchd就可以搜出结果了

     

    使用service 控制sphinx

     

    先增加一sphinx用户并属于website组(事先已存在),并修改sphinx目录的属主

     

    创建/etc/init.d/sphinx脚本

     

    修改权限并加入到service,机器启动时自动启动