php + MongoDB + Sphinx 实现全文检索 (一)

本文介绍了在Sphinx对中文分词支持不佳的情况下,选择Coreseek作为解决方案。详细阐述了如何搭建基于CentOS 6.5的Coreseek环境,包括安装和配置。此外,还探讨了如何将MongoDB作为数据源,处理MongoDB的objectId映射问题,以及规划将全文检索作为系统服务的两种方案(Plan A和Plan B),最终选择了Plan B,并实现了索引操作工具集和索引查询接口。
摘要由CSDN通过智能技术生成

现状:


Sphinx 目前的稳定版本为 2.2.11.

Sphinx 目前对英文等字母语言采用空格分词,故其对中文分词支持不好,目前官方中文分词方案仅支持按单字分词.

在 Sphinx 基础上,目前国内有两个中文分词解决方案,一个是 sphinx-for-chinese, 一个是 coreseek.

sphinx-for-chinese 没有官网,文档较少,可查到的最新版本可支持 sphinx 1.10 .

coreseek 官方还在维护,但貌似不打算将最新版作为开源方案释出了.

coreseek 最后的开源稳定版本为 3.2.14, 更新时间为2010年中, 基于 sphinx 0.9.9, 不支持string类型的属性.

coreseek 最后的开源beta版本为 4.1, 更新时间为2011年底, 基于 sphinx 2.0.2, 已可支持string类型的属性.

相比而言, coreseek 文档较多,网上用的也更为广泛,因此使用 coreseek 方案.

目前暂时用了 coreseek 3.2.14 稳定版,在后续了解中,发现使用 4.1 beta版更为合适.后续需更换.

 

注1: 如果要使用 coreseek, 要注意其 sphinx 版本.看文档时,不要去看 sphinx 最新文档,而要看对应版本的.

注2:

Sphinx 官网: http://sphinxsearch.com/

Coreseek 官网: http://www.coreseek.cn/


搭建:


基于 CentOS 6.5 .


安装 coreseek:


Coreseek 官网下载地址已失效 (-_- !!!), 需要自己在网上找一个.

Coreseek 官方给出的安装文档已非常详实:

http://www.coreseek.cn/products-install/install_on_bsd_linux/

因为我们不是为了替换 mysql 的全文检索,因此不需要安装 mysql 的 sphinx 插件.


安装 php 的 sphinx 扩展:


Sphinx 官方文档中直接包含了 php 调用 sphinx 的文档,因此还是相当方便的.

扩展安装方法,当时没记录下来,也不难,网上一大堆.这里就不展开了...

扩展需要编译两个 so 文件 (当然路径不一定是我这个路径.):

/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/sphinx.so

/usr/local/lib/libsphinxclient-0.0.1.so

需要在 php.ini 中增加扩展:

extension=sphinx.so


附: 重启 php-fpm 信号量含义:

INT, TERM:立刻终止

QUIT :平滑终止

USR1:重新打开日志文件

USR2:平滑重载所有worker进程并重新载入配置和二进制模块

示例:

1)php-fpm 关闭:

# kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

2)php-fpm 重启:

# kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`


将 MongoDB 作为数据源:


sphinx 最常见搭配是 mysql + php. 非mysql数据源需要解决数据导入问题.

用 Sphinx 全文索引 MongoDB 主要有两个问题需要解决:

一是导入数据到 sphinx 索引, 二是 mongo objectId 到 sphinx document id 的映射.

第 一个问题还算好解决,因为除了 mysql, sphinx 还支持 xml 和 python 数据源.但这里还是建议用 mysql 作为 mongo 数据的中转,因为 xml 数据源不支

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值