sphinx 全文检索实践指南
DESCRIPTION
LAMP人主题分享交流会 第七期 李沫南的分享TRANSCRIPT
![Page 1: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/1.jpg)
LAMP人主题分享交流会
LAMPER.CN
![Page 2: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/2.jpg)
Coreseek/Sphinx全文检索实践指南
李沫南
2011-05-03
![Page 3: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/3.jpg)
涉及的内容
全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划
![Page 4: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/4.jpg)
全文检索可以解决的业务系统问题
列表展示 内容检索 相关内容推荐 统计分析
![Page 5: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/5.jpg)
全文检索 VS 数据库检索
SELECT * FROM documents WHERE title like '%test%'
CPU 100% '30秒内只能进行一次查询 ' 没有找到记录 ...
如何解决? 为了提升数据库的性能,在某些字段上建索引 答案:在全文字段上加索引
![Page 6: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/6.jpg)
数据库的全文索引
全文索引字段,数据库的标配功能 MySQL / PostgreqSQL SQL Server / Oracle
问题: 影响记录的存取性能 非标准的检索语法 切分规则? 排序规则? Too slow while indexing real-world dataset
![Page 7: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/7.jpg)
涉及的内容
全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划
![Page 8: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/8.jpg)
No Magic - 倒排索引
比普通数据库检索快几倍 ~几百倍的性能提升 预读取、预切分 想想新华字典 倒排索引(反向索引)
Term1 → Doc1(pos1, pos2, pos...), Doc2, Doc3 … 正向索引
Doc1 → Term1(pos1, pos2, pos ...)
![Page 9: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/9.jpg)
全文检索技术的宗教传统
线上的查经工具 http://abibletool.net/search.aspx 哥林多前书 13:8 "爱是恒久忍耐、又有恩慈.爱是不嫉妒.爱是不自夸.不张狂. "
![Page 10: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/10.jpg)
倒排索引历史
主后 1230 年,根据拉丁文 圣经 编制 主持者 Hugo de Sancto Charo 雨果 参与着 500 多人
主后 1550年,第一部英文的词索引 编者 John Marbeck
计算机出现后,计算机辅助编制索引 70~80年代,MAT程序族
![Page 11: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/11.jpg)
圣经倒排索引的假设
所有词语具有一样的重要性 不考虑词语出现的先后顺序 分章、分节 不考虑排序(按照出现的先后顺序排序)
![Page 12: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/12.jpg)
涉及的内容
全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划 SEO & SEM 全文检索引擎的视角
![Page 13: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/13.jpg)
全文检索的最简化模型
Word Of Bag 把文档作为一个口袋 Term是口袋中的元素 [假设 ]元素之间
地位平等 顺序无关 独立分布
Boolean 检索 非此即彼的二元世界观 a AND b, a OR b, a NOT b
![Page 14: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/14.jpg)
全文检索 向量空间模型
把文档视为一个向量 Document Vector = {term1, term2, … termN} Query Vector = {term1, term2 }
TF/ IDF 算法 Okapi BM25 (BM = Best Match) Phrase Ranking
Rocchio 相关度反馈算法
![Page 15: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/15.jpg)
向量空间模型的优缺点
优点 考虑到了 Term出现的频率 相对更好的相关度排序
缺点 不适合处理超长文件
或者同一集合上,文件长度的尺寸差距很大 检索的 Term必须完全匹配 不考虑语用(同义词、近义词) CJK 短语支持 ...
其他的模型?
![Page 16: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/16.jpg)
全文检索 概率模型
文档集合分为两部分 相关文档 不相关文档 每个查询词贡献相关度
![Page 17: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/17.jpg)
LSI检索
隐含语义索引 LSI (Latent Semantic Index) 1988年由 S.T. Dumais等人提出,主要用于自然语言理解,通过统计的方法对文档的进行语义分析,发掘同义词,相关词组等等
直接匹配关键词的问题 同一个概念可以用多个词表达 将查询视为一篇文档,并对其进行奇异值分解
算法原理: (terms) x (documents)= (matrix) X分解为三个矩阵 T0, S0, D0'(D0的转置 )的积 降维
![Page 18: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/18.jpg)
涉及的内容
全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划
![Page 19: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/19.jpg)
开源检索系统的对比分析
开源传万世,因有我参与 常见开源的全文检索系统一览
Lucene / Nutch / Solr APL Sphinx / Coreseek GPL/商业授权 Xapian GPL Lemur (支持 Language Model) BSD
非主流 Zettair Terrier ....
![Page 20: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/20.jpg)
如何评价检索系统?
检索精度( F-Score) 查全率、查准率(相关度)
可以处理的数据规模、系统架构 使用的检索模型(概率|向量空间|语言) 特性:
字段检索、自定义排序、属性过滤 正向索引?反向索引?分布式支持 接口的丰富程度 业务的其他需要
没有圣杯!
![Page 21: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/21.jpg)
检索系统特性一览特性 Lucene Sphinx
(Coreseek)Xapian Lemur
开发语言 Java C/C++ C/C++ C/C++
索引存储结构 专用格式 专用格式 B+ 树 B+ 树
正向、反向索引 支持 仅反向 * 支持 支持
自定义排序 支持,需要改源码
支持 部分支持 支持
字段的支持 支持 支持 * 不支持 支持
TermID的算法 顺序编号 CRC64* Hash Unknown
分布式支持 Nutch 支持 N/A 支持
![Page 22: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/22.jpg)
涉及的内容
全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划
![Page 23: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/23.jpg)
Why I choose Sphinx
Terabyte Index 良好的文档支持 与 LAMP软件栈紧密集成 唯一可选的 C/C++检索系统(@2006) Lucene 不适用于复杂检索(@2006) I hate Java
![Page 24: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/24.jpg)
Sphinx (Coreseek)特性介绍( 1)
high indexing and searching performance; advanced indexing and querying tools (flexible
and feature-rich text tokenizer, querying language, several different ranking modes, etc);
advanced result set post-processing (SELECT with expressions, WHERE, ORDER BY, GROUP BY etc over text search results);
proven scalability up to billions of documents, terabytes of data, and thousands of queries per second;
![Page 25: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/25.jpg)
Sphinx(Coreseek) 特性介绍( 2)
easy integration with SQL and XML data sources, and SphinxAPI, SphinxQL, or SphinxSE search interfaces;
easy scaling with distributed searches. Python data source adapter layer Build-in Chinese Tokenizer
![Page 26: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/26.jpg)
Coreseek(Sphinx) VS Lucene
Coreseek ( Sphinx) 开箱即用的产品 ( LAMP) 支持各种数据来源( via Python Source) 内置中文分词( ...) 商业支持
Lucene Java 人力成本低 库结构设计,修改容易 第三方工具? 分布式?
![Page 27: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/27.jpg)
Sphinx VS Lucene
Faster Indexing Faster, more relevant searching SQL style queries We can do Java, but don`t require a Java stack. RT-Index VS. In memory Index
![Page 28: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/28.jpg)
Sphinx 优势
BM25 Ranker phrase base ranking Boosts (sub) phrase matches Perfect match is guaranteed to be ranked #1 内置 Grouping、分布式支持
![Page 29: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/29.jpg)
Sphinx 限制
~ = 20 G , Per-single Index CRC64 WordID Field Mask, Only 24 Field Supported All attributes in memory! Poor windows support No inner cache support Hard to handle more than 3T data
![Page 30: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/30.jpg)
吹牛时间(酒精考验的 Sphinx)
Boardreader.com 3KW 文档, 1M+ query/day
craigslist.com 20~30GB docs, 50M+ query/day
国内的实施 ChinaUnix Blogbus 51CTO 金融街 BBS .... Many site I never seen, due to Open Source ;-) 某档案馆检索( Tb)
![Page 31: Sphinx 全文检索实践指南](https://reader038.vdocuments.net/reader038/viewer/2022102423/558b3c84d8b42a10058b45ed/html5/thumbnails/31.jpg)
Q&A