php+coreseek/sphinx之中文全文搜索平台搭建

来源:互联网 发布:js创建表格节点序列号 编辑:程序博客网 时间:2024/04/30 02:43

1.简介

          sphinx是一款高性能全文搜索软件包,由俄罗斯人开发,sphinx本身是可以支持中文搜索的,只是不支持中文分词,需要安装中文分词插件,coreseek就是一个打包了mmseg中文分词插件和sphinx源码的安装包。

2.安装

         coreseek下载地址:http://www.coreseek.cn/news/7/52/

         下载完成后解压到任意盘下,我这里解压到D盘,重命名为coreseek,目录:d:\coreseek\

3.配置

        在D:\coreseek\etc\下建立配置文件mysql.conf

source mysql{       type                                        = mysql #数据库类型       sql_host                                    = localhost #数据库的IP或者计算机名       sql_user                                    = root    #连接数据库的帐号             sql_pass                                    = 123456   #连接数据库的密码                   sql_db                                      = test   #数据库名称       sql_port                                    = 3306   #数据库端口            sql_query_pre                            = SET NAMES utf8 #连接数据库后取数据之前执行的SQL语句       sql_query                                   = SELECT goods_id,goods_name,goods_add_time FROM goods #执行的数据库语句       sql_attr_uint                               = goods_id #sql_attr_uint和sql_attr_timestamp用于定义用于api过滤或者排序,写多行制定多列   } index mysphinx{       source                                     = mysql  #设置索引的源       path                                       = D:/coreseek/var/data/mysql #设置索引存放路径       charset_dictpath                     = D:/coreseek/etc/  <span style="font-size:12px;"><span style="font-size:12px;"><span style="font-family:华文细黑;">指明分词法读取词典文件的位置,当启用分词法时,为必填项。                                                                                                在使用<span>LibMMSeg</span>作为分词 库时,需要确保词典文件<span>uni.lib</span>在指定的目录下</span></span></span>       charset_type                               = zh_cn.utf-8  #设置字符集编码类型,与数据库的一致          ngram_len                         = 1 #使用一元字符切分模式,对单个中文字符进行索引              ngram_chars               = U+3000..U+2FA1F, U+FF41..U+FF5A->a..z, U+FF21..U+FF3A->a..z, A..Z->a..z, a..z                                                    #表示要进行一元字符切分模式的字符  } searchd{       listen                                     = 9312 #监听的端口       max_matches                                = 1000 #定义守护进程在内存中为每个索引所保持并返回给客户端的匹配数目的最大值       pid_file                                   = D:/coreseek/var/log/searchd_mysql.pid #<span style="font-size:12px;"><span style="font-size:12px;"><span style="font-family:华文细黑;">pid</span><span style="font-family:华文细黑;">文件路径</span></span></span>       log                                        = D:/coreseek/var/log/searchd_mysql.log #检索日志       query_log                                  = D:/coreseek/var/log/query_mysql.log  #查询日志}
      注:以上代码copy到mysql.conf需要去掉注释
        生成索引:win下打开命令行,输入:d:\coreseek\bin\indexer --config d:\coreseek\etc\mysql.conf --all

正常运行结果如下:

     

      启动sphinx:d:\coreseek\bin\searchd --config d:\coreseek\etc\mysql.conf

正常运行结果如下

   

4.建立项目文件

在web目录下建立项目文件test,把d:\coreseek\api\ sphinxapi.php文件复制到test下,同时建立index.php文件,复制如下内容:

<?php include 'sphinxapi.php';  // 加载Sphinx API $sc = new SphinxClient(); // 实例化Api$sc->setServer('localhost', 9312); // 设置服务端,第一个参数sphinx服务器地址,第二个sphinx监听端口$sc->SetMatchMode ( "SPH_MATCH_ANY" ); $sc->setLimits(0,1000);//  设置返回数据条数,默认20条$res = $sc->query('手机', 'mysql'); // 执行查询,第一个参数查询的关键字,第二个查询的索引名称,mysql索引名称(这个也是在配置文件中定义的),多个索引名称以,分开,也可以用*表示所有索引。var_dump($res);?>

运行项目,OK。

 ...............................................

.................................................


ps:按照如上步骤整好,运行后一直没有结果,也不报错,反复检查文件、改变关键词还是没有结果,但是搜索英文有结果,弄了一上午都没解决问题,在我将要放弃时候,才发现因为项目下的index.php文件格式不是utf-8抓狂,调整文件格式,终于成功了!


0 0
原创粉丝点击