架构使用图例
优势
- 数据库搜索,如果搜索范围包括全部正文数据,往往性能很低,用户响应时间长(分钟级,经常超时);而全文检索可以在0.X秒(毫秒级)的时间内将结果反馈给用户。
- 数据库搜索,一个用户在搜索,往往会影响其他用户对应用系统进行操作;全文检索可以同时支持多个用户并发搜索,不影响其他用户对应用系统的操作。
- 支持不同的搜索模式(“完全匹配”,“短语匹配”,“任意匹配”)。
- 数据库搜索很难实现多个关键字的复合搜索;而全文检索可以实现,包括“和(AND)”、“或(OR)”、“否(NOT)”等。
- 数据库搜索难于对结果进行相关度排序,当检索结果多时;用户往往难于找到最恰当的文档;而全文检索通过统计的研究成果,可以将文档进行相关度排序后,再返回给用户,提高用户的效率。
- 全文检索还可以对检索结果的数据进行聚类分析(Group,这里的聚类和NLP里面的聚类算法不同),增进用户对数据分布情况的了解。
- 优秀的全文检索系统支持按照文档的不同字段分配不同的检索权重,根据应用的不同,动态的改变结果的排序。
- 对于中文、日文和韩文而言,全文检索支持分词,进一步缩小了结果集的范围;而数据库检索往往不支持,往往一些与搜索词毫不相干的内容也会混进结果集。
- 在单一CPU上,最高可对100GB的文件建立索引,单一索引可包括100MB文件。
- 支持主从式的分布式搜索,单一节点失效不影响整个搜索系统。
劣势
- 全文检索需要用户定时执行建立索引的动作,比直接使用数据库搜索增加了维护的工作。
- 对于全英文数据建立索引的速度可达10MB/秒,在启用中文分词后,建立索引的速度只有300KB/秒。
- 实现的不完善的全文检索系统容易造成索引与数据库的不一致,反而可能会降低用户的使用体验。
安装环境
- CentOS6.5
- PHPStudy
- PHP5.5
- Apache
- MySQL
- coreseek3.2.14稳定版
- 需要预装软件:gcc、g++、gcc-c++、libtool、autoconf、automake、imake、mysql-devel、libxml2-devel、expat-devel
安装流程
下载coreseek3.2.14稳定版
wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
tar -zxvf coreseek-3.2.14.tar.gz
cd coreseek-3.2.14
需要先安装mmseg中文分词!!
cd mmseg-3.2.14
./bootstrap
./configure --prefix=/usr/local/mmseg
报错!
解决方法:
第一种:
automake
./configure --prefix=/usr/local/mmseg
第二种:
aclocal
libtoolize --force
automake --add-missing
autoconf
autoheader
make clean
./configure --prefix=/usr/local/mmseg
make
make install
安装csft
cd csft3.2.14
sh buildconf.sh
./configure --prefix=/usr/local/coreseek --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ --with-mysql=/phpstudy/mysql
make
make install
配置简单说明
locale //需要全部为zh_CN.UTF-8
vim /etc/sysconfig/i18n //更改语言
coreseek配置文件
配置文件路径:/usr/local/coreseek/etc
默认配置文件名:csft.conf
一般情况下,sql_query给出读取数据的SQL语句,第一列为自增ID字段,然后可以包括字符串字段,整数数值字段,整数数值字段需要在后面使用sql_attr_uint明确标注,有多个则分别标注即可。
mmseg配置文件
配置文件路径:/usr/local/mmseg/etc/
测试中文分词:
/usr/local/mmseg/bin/mmseg -d /usr/local/mmseg/etc (测试文档路径)
结果:
常用使用方法和操作说明
搜索服务
(必须最先开启,否则后续操作会缺少必要的参数文件)
//启动服务
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf --console
成功:
//停止服务
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft/conf --stop
生成索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all
//--all表示所有索引,也可以指定索引名
报错1:
解决1:
报错2:MySQL需要sock文件
解决2:修改coreseek配置文件
报错3:词库路径错误
解决3:修改coreseek配置文件
成功:
更新索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all --rotate
搜索检测
/usr/local/coreseek/bin/searchd -a ** //要搜索的词
增量索引
利用crontab定时任务,3.2.14唯一的增量索引方法;
WINDOWS本地连接LINUX数据库会出现权限问题
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
自动脚本
all.sh(重建全部索引)
#!/bin/bash
#all.sh
/usr/local/coreseek/bin/indexer --all --rotate >> /usr/local/coreseek/var/log/all/log
delta.sh(生成增量索引)
#!/bin/bash
#delta.sh
/usr/local/coreseek/bin/indexer delta --rotate >> /usr/local/coreseek/var/log/delta.log
crontab -e
*/1 * * * * (增量脚本路径delta.sh) 每分钟执行一次增量索引
00 02 * * * (主索引路径all.sh) 每天2点重建主索引
PHP操作coreseek
coreseek安装包里有接口文件:/testpack/api/sphinxapi.php
;
也可以使用sphinx扩展(推荐)。
安装sphinx扩展
wget http://pecl.php.net/get/sphinx-1.3.3.tgz
tar -zxvf ...
cd ...
在文件夹里运行PHP的phpize命令
./configure --with-php-config=/phpstudy/server/php/bin/php-config --with-sphinx
报错:
解决:
在coreseek安装包下的csft-3.2.14/api/libsphinxclient
目录
./configure
make&&make install
make&&make install
修改php.ini
重启服务器,查看phpinfo
运行中报错:
解决:
常用函数
PHP官网sphinx扩展函数
1. setServer();设置IP和端口。
2. setLimits();设置显示条数。
3. setMatchMode();设置全文查询的匹配模式。
4. buildExcerpts();设置高亮。
5. query();执行搜索查询。