Sphinx搜索引擎架构与使用文档(和MySQL结合)


这篇文档很有用哦,一直有保留

Sphinx搜索引擎架构与使用文档(和MySQL结合)V1.1




本文档修订历史:
 
版本号                  修订人     修订说明       
1.0.0-20080721    张          新建       
1.0.1-20080723    张          增加搜索索引配置       
1.0.2-20080916    张          增加在指定字段中搜索的SQL实例       
1.1.0-20081118    张           修正小错误    

●说明:水绿色背景表示Linux Shell命令、橄榄色背景表示MySQL的SQL语句、淡蓝色背景表示配置文件内容、黑底白字表示屏幕显示内容。
目  录
一、XX网搜索引擎架构设计:   

1、搜索引擎架构图(基于PHP+MySQL+Sphinx):   


2、搜索引擎架构设计思路:   
⑴、调用方式最简化:   
⑵、创建索引、查询速度快:   
⑶、按服务类型进行分离:   
⑷、“主索引+增量索引”更新方式:   
⑸、“Ext3文件系统+tmpfs内存文件系统”相结合:   
⑹、中文分词词库:   
二、MySQL+Sphinx+SphinxSE安装步骤:   
1、安装python支持   
2、编译安装LibMMSeg  
3、编译安装MySQL 5.1.26-rc、Sphinx、SphinxSE存储引擎   
4、创建Sphinx索引文件和MySQL数据文件存放目录   
5、创建MySQL配置文件(以线上配置文件为准)   
⑴、创建配置文件/mysql/3306/my.cnf(以db11的3306端口为例)   
⑵、创建配置文件/mysql/3406/my.cnf(以db11的3406端口为例)   
6、制作一份MySQL Slave供搜索引擎使用   
7、创建快捷启动、停止、重启、杀死MySQL进程的脚本(以db11的3306端口为例)   
三、Sphinx配置:   
1、生成Sphinx中文分词词库   
⑴、词典的构造   
⑵、词典文件格式   
⑶、XX网搜索引擎的中文分词词库   
2、创建Sphinx主索引文件、增量索引文件存放目录   
3、创建Sphinx配置文件   
4、初始化sphinx.conf中配置的全部索引   
5、创建两个shell脚本,一个用来创建主索引、一个用来创建增量索引。   
⑴、主索引更新脚本   
①、创建脚本build_main_index.sh:   
②、赋予主索引更新脚本可执行权限:   
③、每天凌晨定时重建主索引:   
⑵、增量索引更新脚本   
①、创建脚本build_delta_index.sh:   
②、赋予增量索引更新脚本可执行权限:   
③、每3分钟自动重建一次搜索引擎的增量索引:   
6、启动Sphinx守护进程(searchd)   
7、配置服务器开机启动时需要自动执行的命令(以db11为例)   
8、创建Sphinx存储引擎表:   
⑴、设置/etc/hosts   
⑵、登录运行在3306端口的MySQL服务器(提供“搜索查询服务”):   
⑶、创建数据库“Sphinx”和相对应的Sphinx表(SQL语句):   
示例SQL:   
四、如何通过SQL语句调用搜索引擎:   
1、搜索应用实例   
⑴、XX网北京出租房搜索   
⑵、XX网北京小区搜索   
⑶、在指定字段中搜索(例如在字段“title”中搜索关键字“中关村”)   
2、SphinxSE存储引擎及SQL语法详细说明   

一、XX网搜索引擎架构设计:
1、搜索引擎架构图(基于PHP+MySQL+Sphinx):
 
注:目前有两台搜索数据库,db9(192.168.113.209)(MySQL 3306端口用于搜索查询、3406端口用于建索引)和db11(192.168.113.211)(MySQL 3306、3307端口用于搜索查询,3406端口用于建索引),dbsearch为NetScaler虚拟IP 192.168.113.163(做db9的3306,db11的3306、3307负载均衡)的hosts。

2、搜索引擎架构设计思路:
⑴、调用方式最简化:
尽量方便前端Web工程师,只需要一条简单的SQL语句“SELECT ... FROM ... JOIN ... ON (...=...) WHERE query='...';”即可实现高效搜索。
⑵、创建索引、查询速度快:
①、Sphinx Search 是由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。
Sphinx的特征:
·Sphinx支持高速建立索引(可达10 MB/秒,而Lucene建立索引的速度是1.8MB/秒)
·高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)
·高扩展性(在单一CPU上,实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)
·支持分布式检索
·支持基于短语和基于统计的复合结果排序机制
·支持任意数量的文件字段(数值属性或全文检索属性)
·支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)
·支持作为Mysql的存储引擎

②、通过国外《High Performance MySQL》专家组的测试可以看出,根据主键进行查询的类似“SELECT ... FROM ... WHERE id = ...”的SQL语句(其中id为PRIMARY KEY),每秒钟能够处理10000次以上的查询,而普通的SELECT查询每秒只能处理几十次到几百次:


 

③、Sphinx不负责文本字段的存储。假设将数据库的id、date、title、body字段,用sphinx建立搜索索引。根据关键字、时间、类别、范围等信息查询一下sphinx,sphinx只会将查询结果的ID号告诉我们。要显示title、body等信息,还需要根据此ID号去查询MySQL数据库,或者从Memcachedb等其他的存储中取得。安装SphinxSE作为MySQL的存储引擎,将MySQL与Sphinx结合起来,是一种便捷的方法。
创建一张Sphinx类型表,将MyISAM表的主键ID和Sphinx表的ID作一个JOIN联合查询。这样,对于MyISAM表来所,只相当于一个WHERE id=...的主键查询,WHERE后的条件都交给Sphinx去处理,可以充分发挥两者的优势,实现高速搜索查询。

⑶、按服务类型进行分离:
    为了保证数据的一致性,我在配置Sphinx读取索引源的MySQL数据库时,进行了锁表。Sphinx读取索引源的过程会耗费一定时间,由于MyISAM存储引擎的读锁和写锁是互斥的,为了避免写操作被长时间阻塞,导致数据库同步落后跟不上,我将提供“搜索查询服务”的和提供“索引源服务”的MySQL数据库进行了分开。监听3306端口的MySQL提供“搜索查询服务”,监听3406端口的MySQL提供“索引源服务”。

⑷、“主索引+增量索引”更新方式:
    XX网的特征:发帖较为频繁;刚发完的帖被用户自己编辑、修改的可能性大;新发的帖会被编辑审核(删除、标记为中介等);两天以前的老帖变动性较小。
    基于这个特征,我设计了Sphinx主索引和增量索引。对于前天17:00之前的记录建立主索引,每天凌晨自动重建一次主索引;对于前天17:00之后到当前最新的记录,间隔3分钟自动重建一次增量索引。

⑸、“Ext3文件系统+tmpfs内存文件系统”相结合:
    为了避免每4分钟重建增量索引导致磁盘IO较重,从而引起系统负载上升,我将主索引文件创建在磁盘,增量索引文件创建在tmpfs内存文件系统“/dev/shm/”内。“/dev/shm/”内的文件全部驻留在内存中,读写速度非常快。但是,重启服务器会导致“/dev/shm/”内的文件丢失,针对这个问题,我会在服务器开机时自动创建“/dev/shm/”内目录结构和Sphinx增量索引。

⑹、中文分词词库:
    XX网搜索引擎使用到的中文分词词库,为本人根据“百度早期中文分词库”+“搜狗拼音输入法细胞词库”+“XX网地标词库”+“LibMMSeg高频字库”综合处理而成。


二、MySQL+Sphinx+SphinxSE安装步骤:
1、安装python支持(以下针对CentOS系统,其他Linux系统请使用相应的方法安装)
yum install -y python python-devel

2、编译安装LibMMSeg(LibMMSeg是为Sphinx全文搜索引擎设计的中文分词软件包,其在GPL协议下发行的中文分词法,采用Chih-Hao Tsai的MMSEG算法。LibMMSeg在本文中用来生成中文分词词库。)
wget http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz
tar zxvf mmseg-0.7.3.tar.gz
cd mmseg-0.7.3/
./configure
make
make install
cd ../

3、编译安装MySQL 5.1.26-rc、Sphinx、SphinxSE存储引擎
wget http
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值