【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置

架构使用图例

优势

  1. 数据库搜索,如果搜索范围包括全部正文数据,往往性能很低,用户响应时间长(分钟级,经常超时);而全文检索可以在0.X秒(毫秒级)的时间内将结果反馈给用户。
  2. 数据库搜索,一个用户在搜索,往往会影响其他用户对应用系统进行操作;全文检索可以同时支持多个用户并发搜索,不影响其他用户对应用系统的操作。
  3. 支持不同的搜索模式(“完全匹配”,“短语匹配”,“任意匹配”)。
  4. 数据库搜索很难实现多个关键字的复合搜索;而全文检索可以实现,包括“和(AND)”、“或(OR)”、“否(NOT)”等。
  5. 数据库搜索难于对结果进行相关度排序,当检索结果多时;用户往往难于找到最恰当的文档;而全文检索通过统计的研究成果,可以将文档进行相关度排序后,再返回给用户,提高用户的效率。
  6. 全文检索还可以对检索结果的数据进行聚类分析(Group,这里的聚类和NLP里面的聚类算法不同),增进用户对数据分布情况的了解。
  7. 优秀的全文检索系统支持按照文档的不同字段分配不同的检索权重,根据应用的不同,动态的改变结果的排序。
  8. 对于中文、日文和韩文而言,全文检索支持分词,进一步缩小了结果集的范围;而数据库检索往往不支持,往往一些与搜索词毫不相干的内容也会混进结果集。
  9. 在单一CPU上,最高可对100GB的文件建立索引,单一索引可包括100MB文件。
  10. 支持主从式的分布式搜索,单一节点失效不影响整个搜索系统。

劣势

  1. 全文检索需要用户定时执行建立索引的动作,比直接使用数据库搜索增加了维护的工作。
  2. 对于全英文数据建立索引的速度可达10MB/秒,在启用中文分词后,建立索引的速度只有300KB/秒。
  3. 实现的不完善的全文检索系统容易造成索引与数据库的不一致,反而可能会降低用户的使用体验。

安装环境

  1. CentOS6.5
  2. PHPStudy
  3. PHP5.5
  4. Apache
  5. MySQL
  6. coreseek3.2.14稳定版
  7. 需要预装软件: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

报错!
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

【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第1张图片

vim /etc/sysconfig/i18n //更改语言

【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第2张图片

coreseek配置文件

配置文件路径:/usr/local/coreseek/etc
默认配置文件名:csft.conf

【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第3张图片
一般情况下,sql_query给出读取数据的SQL语句,第一列为自增ID字段,然后可以包括字符串字段,整数数值字段,整数数值字段需要在后面使用sql_attr_uint明确标注,有多个则分别标注即可。

mmseg配置文件

配置文件路径:/usr/local/mmseg/etc/

测试中文分词:

/usr/local/mmseg/bin/mmseg -d /usr/local/mmseg/etc (测试文档路径)


结果:
【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第4张图片

常用使用方法和操作说明

搜索服务

(必须最先开启,否则后续操作会缺少必要的参数文件)

//启动服务
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf --console

成功:
【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第5张图片

//停止服务
/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
解决1:
【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第6张图片
报错2:MySQL需要sock文件
报错2
解决2:修改coreseek配置文件

报错3:词库路径错误
【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第7张图片
解决3:修改coreseek配置文件
解决3

成功:
【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第8张图片

更新索引

/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命令
【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第9张图片

./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

【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第10张图片
重启服务器,查看phpinfo
【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第11张图片

运行中报错:
【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第12张图片
解决:
【学习笔记】coreseek(sphinx)搜索引擎的安装及简单配置_第13张图片

常用函数

PHP官网sphinx扩展函数
1. setServer();设置IP和端口。
2. setLimits();设置显示条数。
3. setMatchMode();设置全文查询的匹配模式。
4. buildExcerpts();设置高亮。
5. query();执行搜索查询。

你可能感兴趣的:(数据库,搜索引擎,sphinx,全文检索)