已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2009-11-06,Sphinx 使用经验分享,研发中心 黄胜,Contents,引言,1,什么是Sphinx,Sphinx 优缺点,4,系统的安装部署,3,5,Sphinx 的配置,6,相关应用,4,2,5,6,引言,1,引言,系统A: 数据量大,内容审核现有搜索建立索引慢;人员流动,现有搜索难于维护;,背景:内容审核搜索的现状,系统B: 前端调用复杂;使用全表扫描,搜索速度慢;对结果的没有排序;难于最快找到最精确的数据,改进要点: 1、高速的索引建立; 2、避免对数据库做like操作,减少压力; 3、对搜索的结果进行权重排序; 4、前端开发调用方便; 5、最好门槛低,易于掌握且后期维护,引言,为什么是Sphinx ?,引言,Contents,什么是Sphinx,2,Hot Tip,什么是全文检索? 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引, 指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统。 一般来说,全文检索需要具备建立索引和提供查询的基本功能,此外现代的全文检索系统还需要具有方便的用户接口、面向WWW的开发接口、二次应用开发接口等等。 功能上,全文检索系统核心具有建立索引、处理查询返回结果集、增加索引、优化索引结构等等功能,外围则由各种不同应用具有的功能组成。 结构上,全文检索系统核心具有索引引擎、查询引擎、文本分析引擎、对外接口等等,加上各种外围应用系统等等共同构成了全文检索系统。,什么是Sphinx,Hot Tip,什么是全文检索?,什么是Sphinx,Hot Tip,什么是Sphinx? (Sphinx = SQL prase index) Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等。同时为MySQL也设计了一个存储引擎插件。,什么是Sphinx,Hot Tip,Sphinx 组件 索引生成器(indexer) 查询数据库,为结果的每行中的指定字段建立索引,并且将每个索引条目绑定到行的主键上。 搜索引擎(searchd) 搜索引擎是名为 searchd 的守护程序。该守护程序将接收搜索词和其他参数,快速遍历一个或多个索引,并返回结果。如果找到匹配,searchd 将返回一个主键数组。对于这些键,应用程序可以针对相关数据库运行查询来查找包含匹配的完整记录。Searchd 默认将在端口 3312 上通过套接字连接与应用程序进行通信。 命令行search实用程序(search) search 实用程序使您可以从命令行构造搜索而无需编写代码。如果 searchd 返回匹配,则 search 将查询数据库并显示匹配集中的行。search 实用程序对于调试 Sphinx 配置和执行临时搜索十分有用。,什么是Sphinx,Sphinx 优缺点,3,Sphinx 优缺点,优点: 高速索引 (10MB/s) 高速搜索 (2-4G的文本量中平均查询速度不到0.1秒) 高可用性 (单CPU上最大可支持100 GB的文本,100万条纪录) 提供良好的相关性排名 支持分布式搜索 提供MySQL内部插件式存储引擎上搜索 支持多字段的检索域 支持断词 支持MySQL(MYISAM和INNODB)和Postgres数据库 支持windows, linux, unix, mac等平台,Sphinx 优缺点,缺点: 必须要有主键 主键必须为整型 不负责数据存储 配置不灵活 (),Diagram,系统的安装部署,4,系统的安装部署,安装步骤: 中文分词工具mmseg 数据库mysql Sphinx插件补丁(SphinxSE) Sphinx中文支持 安装Sphinx 配置,系统的安装部署,安装中文分词工具mmseg : cd /opt/search/src tar xf mmseg-0.7.3.tar.gz cd mmseg-0.7.3 ./configure prefix=/opt/search/app/mmseg make make install make clean,系统的安装部署,安装中文分词工具mmseg :,系统的安装部署,安装MySQL数据库 : cd /opt/search/src tar xf sphinx-0.9.8-rc2.tar.gz tar xf mysql-5.1.29-rc.tar.gz cd sphinx-0.9.8-rc2 patch p1 /sphinx-0.98rc2.zhcn-support.patch #sphinxse插件 patch p1 / fix-crash-in-excerpts.patch #sphinx支持中文 cp rf mysqlse /opt/search/src/mysql-5.1.29-rc/storage/sphinx cd /opt/search/src/mysql-5.1.29-rc/ ./configure -prefix=/opt/search/app/mysql -localstatedir=/opt/search/app/mysql/var -without-debug -with-charset=gbk -with-client-ldflags=-all-static -enable-assembler -with-extra-charsets=all -enable-thread-safe-client -with-plugins=innobase,partition,sphinx make make install make clean,系统的安装部署,安装MySQL数据库 :,系统的安装部署,安装Sphinx: cd /opt/search/src/sphinx-0.9.8-rc2 ./configure -prefix=/opt/search/app/sphinx -with-mysql=/opt/search/app/mysql/ -with-mysql-includes=/opt/search/app/mysql/include/mysql/ -with-mysql-libs=/opt/search/app/mysql/lib/mysql/ -with-mmseg=/opt/search/app/mmseg/ -with-mmseg-includes=/opt/search/app/mmseg/include/mmseg/ -with-mmseg-libs=/opt/search/app/mmseg/lib/ make make install make clean,Sphinx 的配置,5,Sphinx 的配置,Sphinx 的配置 配置文件的内容组成: Source 源名称1 Index 索引名称1 Source 源名称2 Index 索引名称2 Indexer Searchd ,Sphinx 的配置,字典生成 cd /opt/search/src/mmseg-0.7.3/data /opt/search/app/mmseg/bin/mmseg -u unigram.txt cp unigram.txt.uni /opt/search/app/sphinx/uni.lib,Sphinx 的配置,#日记频道 #source部分 source diary type = mysql sql_host = localhost sql_user = search sql_pass = GZj4yngYWRXZtlUDJFeE sql_db = search sql_sock = /tmp/mysql.sock sql_port = 3306 sql_query_pre = SET NAMES gbk sql_query_pre = SET SESSION query_cache_type=OFF sql_query_range = SELECT MIN(diary_aid), MAX(diary_aid) FROM diary WHERE 1 sql_query = SELECT diary_aid, diary_id, diary_owner, diary_title, diary_memo FROM diary WHERE diary_aid=$start AND diary_aid$end sql_range_step = 10000 #sql_attr_uint = diary_aid #sql_attr_timestamp = diary_addtime sql_query_info = SELECT * FROM diary WHERE diary_aid=$id ,Sphinx 的配置,#日记频道 #index 部分 index diary source = diary path = /opt/search/app/sphinx/var/data/diary_new/diary_new docinfo = extern mlock = 0 morphology = none min_word_len = 2 charset_type = zh_cn.gbk charset_dictpath = /opt/search/app/sphinx/ min_infix_len = 0 enable_star = 1 html_strip = 0 charset_table = “” ,Sphinx 的配置,#日记频道 #indexer & searchd indexer mem_limit = 512M searchd port = 3321 log = /opt/search/app/sphinx/var/log/searchd_diary_new.log query_log = /opt/search/app/sphinx/var/log/query_diary_new.log read_timeout = 5 max_children = 30 pid_file = /opt/search/app/sphinx/var/log/searchd_diary_new.pid max_matches = 10000 seamless_rotate = 1 preopen_indexes = 0 unlink_old = 1 ,Sphinx 的配置,Sphinx 主索引+增量索引配置 配置文件的内容组成: Source 源名称1 Source 增量1 : 源名称1 Index 主索引1 Index 增量索引1 : 主索引1 Indexer Searchd ,Sphinx 的配置,Sphinx 主索引+增量索引配置 配置文件的内容组成: Source 源名称1 Source 增量1 : 源名称1 Index 主索引1 Index 增量索引1 : 主索引1 Indexer Searchd ,Sphinx 的配置,Sphinx 主索引+增量索引配置(主索引数据源) sql_query_pre = SET NAMES utf8 sql_query_pre = SET SESSION query_cache_type=OFF sql_query_pre = REPLACE INTO search_counter SELECT 1,MAX(pid) FROM cdb_posts #创建主索引前更改标识位置 sql_query = SELECT pid, fid,tid,authorid, dateline, subject, message FROM cdb_posts WHERE pid = $start AND pid = $end sql_query_range = SELECT 1, max_doc_id FROM search_counter WHERE counterid = 1 sql_range_step = 1000,Sphinx 的配置,Sphinx 主索引+增量索引配置(增量索引数据源) sql_query_pre = SET NAMES utf8 sql_query_pre = SET SESSION query_cache_type=OFF sql_query = SELECT pid, fid,tid,authorid, dateline, subject, message FROM cdb_posts WHERE pid (SELECT max_doc_id FROM search_counter WHERE counterid=1),Sphinx 的配置,创建索引 主索引 cd /opt/search/app/sphinx ./bin/indexer c ./etc/diary.conf 主索引1 -rotate 增量索引 cd /opt/searchd/app/sphinx ./bin/indexer c ./etc/diary.conf 增量索引1 -rotate 合并主索引和增量索引 cd /opt/searchd/app/sphinx ./bin/indexer -config etc/sphinx.conf -merge 主索引 增量索引 -merge-dst-range deleted 0 0 -rotate,Contents,Sphinx 的应用,6,Sphinx 的应用,Sphinx 调用方式 1、自带search 2、Sphinx官方提供的API接口 3、通过安装的SphinxSE,Sphinx 的应用,Sphinx 调用方式 自带search cd /opt/search/app/sphinx ./bin/search c ./etc/diary.conf 搜索词,Sphinx 的应用,Sphinx 调用方式 Sphinx官方提供的API接口 $cl = new SphinxClient (); /创建Sphinx的客户端接口对象 $cl-SetServer(localhost,3312); /设置连接Sphinx主机名与端口 $cl-SetWeights ( array ( 100, 1 ) ); /可选,为检索字段设置权重 $cl-SetMatchMode(SPH_MATCH_ALL); /设定搜索模式 $cl-SetGroupBy($attribute, $func, $groupsort); /相当于GROUP BY $cl-SetSortMod
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论