sphin社区全文搜索平台配置手册

上传人:cn****1 文档编号:490305226 上传时间:2023-05-13 格式:DOCX 页数:22 大小:144.75KB
返回 下载 相关 举报
sphin社区全文搜索平台配置手册_第1页
第1页 / 共22页
sphin社区全文搜索平台配置手册_第2页
第2页 / 共22页
sphin社区全文搜索平台配置手册_第3页
第3页 / 共22页
sphin社区全文搜索平台配置手册_第4页
第4页 / 共22页
sphin社区全文搜索平台配置手册_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《sphin社区全文搜索平台配置手册》由会员分享,可在线阅读,更多相关《sphin社区全文搜索平台配置手册(22页珍藏版)》请在金锄头文库上搜索。

1、干万级Discuz!数据全文检索方案(Sphinx )前言:康盛创想的Discuz!从创立之初即以提高产品效率为突破口,随着编译模板,语法生成内 核,数据缓存和自动更新机制等独创或独有技术的应用,和坚固的数据结构及最少化数据库查询设计, 使得 Discuz! 可以在极为繁忙的服务器环境下快速高效稳定运行。由于Discuz产品依赖MySQL数据库性能,在全文检索方面如果仅仅依靠MySQL的LIKE %关 键词语句无法取得理想的成绩。本文阐述经过Discuz!生产环境考验的构建在Sphinx基础上的千 万级Discuz!数据全文检索解决方案。出自俄罗斯的开源全文搜索引擎软件Sphinx在单一索引达

2、到4千万条记录情况下的查询速度仍 为0.x秒甚至0.0x秒级别。Sphinx创建索引的速度约五分钟处理百万条记录,对于每分钟的增量索 引重建只需要几十秒,每日的增量索引合并到主索引也只需一分钟左右。此构架基础上的Discuz!高 负载站点,已成功解决搜索速度慢、经常锁表、无法分布式搜索等问题。千万级Discuz!数据全文检索方案(Sphinx )适用于繁忙的站点并且论坛访问者有大量的搜索需 求,本方案主要解决搜索缓慢问题。本文环境以CentOS 5为基准。初始化一次全部索引,按系统计划任务crontab定时方式,每5 分钟重建一次增量索引(增量索引不与主索引合并),每日凌晨3:30建立一次昨日

3、比较的增量索引(合 并到主索引中)主索引建立在磁盘目录/data/sphdata,增量索引建立在内存/dev/shm/中避免大量的I/O操作,由于帖子编辑限制,全部索引每两个月重建一次。目录千万级Discuz!数据全文检索方案(Sphinx)1Sphi nx快速介绍2、Sph inx全文检索方案构架图3二、Sphinx中文分词4三、Sph inx安装步骤41. 安装、升级所需的程序库42. 创建安装文件夹并下载源代码43. 安装MMseg中文分词44. 安装 CSFT( Sphinx 的 CoreSeek 修改版) 55. 编译Sph inx过程可能出现的错误5a)无法找到 mysql 路径5

4、b)无法找到 libiconv5c)无法找到 libmysqlclient.so.155d)php 5.2.11 版本的 api BUG5e)生成索引时容易发生磁盘空间不足写入失败的错误 56. 安装为 php 扩展(可选) 67. 安装Sph in xSE存储引擎(可选)6四、Sphinx 配置6.1. mmseg 中文分词词库 6a)词典格式 6b)词库生成方法72. 创建sphi nx数据目录结构73. 创建 sphinx.conf 配置文件74. mmseg.ini 分词配置文件145. 建立Sphi nx增量索引数据表146. 书写常用的sph inx控制命令到sh文件147. 创建

5、相应的文件结构,初始化Sphinx的全部索引178. 启动 sphinx 179. 设置计划任务项 1710. 设置开机启动项 17五、通过命令行测试搜索 1.7六、通过php api调用Sphinx搜索18七、通过MySQL的SphinxSE存储引擎调用Sphinx搜索(可选)19八、Sph inx数据占用量统计19Sphinx 快速介绍Sphinx是独立的搜索服务端,不依赖MySQL,当Sphinx和MySQL结合部署时,Sphinx的数 据来源为MySQL。服务器安装Sphinx,由sphinx.conf配置文件指定Sphinx的数据源,如何读取 MySQL的数据内容,设置Sphinx对

6、MySQL数据库的哪个表哪些字段建立索引,索引的返回数据必 须是数值型。例如一个配置段设置Sphinx对cdb_threads表的subject和author字段建立索引,搜索结果可 以返回tid和uid。另一个配置段设置Sphinx对cdb_posts表的subject和message字段索引,搜索 结果返回 tid 和 pid。Sphinx建立的索引只是查询MySQL数据库获取数据内容,将索引存放在Sphinx的数据文件和 内存中,一般不对MySQL数据库进行修改操作。因为 Sphi nx 独立运行使用 SELECT * FROM cdb_threads WHERE subject LIK

7、E %关键词 LIMIT 0, 10;类似的SQL语句将无法利用Sphinx 搜索,即使服务器端已经部署Sphinx也不会对 该查询语句有任何优化作用。正确使用Sphinx搜索数据的操作方式主要有三种:1、命令行的 search 工具:/usr/local/webserver/sphinx/bin/search -threads test2、php 的 api 接口查询:原理是直接用 fsockopen 连接端口,传递数据取得返回结果。 Sphinx 官方已经提供php的api接口,可以include api查询(本方案以该查询方法为主),也可以将其源 代码编译成 php 扩展而无需 incl

8、ude。3、在mysql中将Sphinx安装为SphinxSE存储引擎,通过SphinxSE方式调用Sphinx。因Sphinx搜索结果只返回INT类型数据,部署Sphinx搜索的核心是由搜索入口(search.php) 提交的关键词到Sphinx中搜索,Sphinx返回对应的tid、pid等信息,再依据tid、pid到cdb_threads 或者cdb_posts中搜索,得到结果集展示在页面上。Sphinx的搜索速度非常快,而tid/pid都是主键查询,总体来说虽然用了多次查询,但是速度仍然非常快。一、 Sphinx 全文检索方案构架图phpMySQL 读写分离千万级Discuz!数据多服务

9、器全文检索方案(Sphinx )N NGSMXNG;klX口hp前端査询入口修改,匹配椅殊查 询语句 CSphinxSE或者PHP api)sphinxW询结果联 接MySQL数据返回p Sphinx监听驀12端口InnoDB表写人计划任务 读入瞰据MylSAMai数据同步apache HTTP ServarNG;ldX /etc/ld.so.confldconfig若仍提示libiconv无法找到,需要修改vi src/Makefile文件,找LIBS =开头的行,将LIBS = -lm -lz -lexpat -L/usr/local/lib -lpthread修改成LIBS = -lm

10、-lz -lexpat -liconv -L/usr/local/lib -lpthreadc) 无法找到 libmysqlclient.so.15将 libmysqlclient.so.15 建立软链到/usr/local/lib 和/usr/lib 目录下,或者加入到 ld.so.confecho /usr/local/webserver/mysql/lib/mysql/ /etc/ld.so.confldconfigd) php 5.2.11 版本的 api BUG当站点的php版本为5.2.11 ,并且通过php api方式获取Sphinx数据,数据超过1000条的情况 下有BUG ,无法解析正确的数据包。遇到此情况必须重新编译php版本,目前已知php 5.2.10是与 Sphinx API 结合非常稳定的版本。e) 生成索引时容易发生磁盘空间不足写入失败的错误需要注意配置文件中设置的Sphinx索引数据存放目录,确保有足够的存储空间。Sphinx的索

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号