千万级 Discuz!数据全文检索方案(Sphinx)
前言:康盛创想的 Discuz!从创立之初即以提高产品效率为突破口,随着编译模板,语法生成内
核,数据缓存和自动更新机制等独创或独有技术的应用,和坚固的数据结构及最少化数据库查询设计,
使得 Discuz! 可以在极为繁忙的服务器环境下快速高效稳定运行。
由于 Discuz!产品依赖 MySQL 数据库性能,在全文检索方面如果仅仅依靠 MySQL 的 LIKE %关
键词% 语句无法取得理想的成绩。本文阐述经过 Discuz!生产环境考验的构建在 Sphinx 基础上的千
万级 Discuz!数据全文检索解决方案。
出自俄罗斯的开源全文搜索引擎软件 Sphinx 在单一索引达到 4 千万条记录情况下的查询速度仍
为 0.x 秒甚至 0.0x 秒级别。Sphinx 创建索引的速度约五分钟处理百万条记录,对于每分钟的增量索
引重建只需要几十秒,每日的增量索引合并到主索引也只需一分钟左右。此构架基础上的 Discuz!高
负载站点,已成功解决搜索速度慢、经常锁表、无法分布式搜索等问题。
千万级 Discuz!数据全文检索方案(Sphinx)适用于繁忙的站点并且论坛访问者有大量的搜索需
求,本方案主要解决搜索缓慢问题。
本文环境以 CentOS 5 为基准。初始化一次全部索引,按系统计划任务 crontab 定时方式,每 5
分钟重建一次增量索引(增量索引不与主索引合并),每日凌晨 3:30 建立一次昨日比较的增量索引(合
并到主索引中)。主索引建立在磁盘目录/data/sphdata,增量索引建立在内存/dev/shm/中避免大量的
I/O 操作,由于帖子编辑限制,全部索引每两个月重建一次。
目 录
千万级 Discuz!数据全文检索方案(Sphinx)............................................................................1
Sphinx 快速介绍 ........................................................................................................................2
一、 Sphinx 全文检索方案构架图 ............................................................................................3
二、 Sphinx 中文分词...............................................................................................................4
三、 Sphinx 安装步骤...............................................................................................................4
1. 安装、升级所需的程序库.............................................................................................. 4
2. 创建安装文件夹并下载源代码....................................................................................... 4
3. 安装 MMseg 中文分词 .................................................................................................. 4
4. 安装 CSFT(Sphinx 的 CoreSeek 修改版) ................................................................ 5
5. 编译 Sphinx 过程可能出现的错误................................................................................. 5
a) 无法找到 mysql 路径.............................................................................................. 5
b) 无法找到 libiconv ................................................................................................... 5
c) 无法找到 libmysqlclient.so.15................................................................................ 5
d) php 5.2.11 版本的 api BUG ................................................................................... 5
e) 生成索引时容易发生磁盘空间不足写入失败的错误 .............................................. 5
6. 安装为 php 扩展(可选) ............................................................................................. 6
7. 安装 SphinxSE 存储引擎(可选)................................................................................ 6
四、 Sphinx 配置......................................................................................................................6
1. mmseg 中文分词词库 ................................................................................................... 6
a) 词典格式 ................................................................................................................ 6
b) 词库生成方法......................................................................................................... 7
1 / 20