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文件,复制如下内容:
<?phpinclude '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,调整文件格式,终于成功了!