sphinx 全文检索实践指南

Post on 25-Jun-2015

2.855 Views

Category:

Documents

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

LAMP人主题分享交流会 第七期 李沫南的分享

TRANSCRIPT

LAMP人主题分享交流会

LAMPER.CN

Coreseek/Sphinx全文检索实践指南

李沫南

2011-05-03

涉及的内容

全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划

全文检索可以解决的业务系统问题

列表展示 内容检索 相关内容推荐 统计分析

全文检索 VS 数据库检索

SELECT * FROM documents WHERE title like '%test%'

CPU 100% '30秒内只能进行一次查询 ' 没有找到记录 ...

如何解决? 为了提升数据库的性能,在某些字段上建索引 答案:在全文字段上加索引

数据库的全文索引

全文索引字段,数据库的标配功能 MySQL / PostgreqSQL SQL Server / Oracle

问题: 影响记录的存取性能 非标准的检索语法 切分规则? 排序规则? Too slow while indexing real-world dataset

涉及的内容

全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划

No Magic - 倒排索引

比普通数据库检索快几倍 ~几百倍的性能提升 预读取、预切分 想想新华字典 倒排索引(反向索引)

Term1 → Doc1(pos1, pos2, pos...), Doc2, Doc3 … 正向索引

Doc1 → Term1(pos1, pos2, pos ...)

全文检索技术的宗教传统

线上的查经工具 http://abibletool.net/search.aspx 哥林多前书 13:8 "爱是恒久忍耐、又有恩慈.爱是不嫉妒.爱是不自夸.不张狂. "

倒排索引历史

主后 1230 年,根据拉丁文 圣经 编制 主持者 Hugo de Sancto Charo 雨果 参与着 500 多人

主后 1550年,第一部英文的词索引 编者 John Marbeck

计算机出现后,计算机辅助编制索引 70~80年代,MAT程序族

圣经倒排索引的假设

所有词语具有一样的重要性 不考虑词语出现的先后顺序 分章、分节 不考虑排序(按照出现的先后顺序排序)

涉及的内容

全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划 SEO & SEM 全文检索引擎的视角

全文检索的最简化模型

Word Of Bag 把文档作为一个口袋 Term是口袋中的元素 [假设 ]元素之间

地位平等 顺序无关 独立分布

Boolean 检索 非此即彼的二元世界观 a AND b, a OR b, a NOT b

全文检索 向量空间模型

把文档视为一个向量 Document Vector = {term1, term2, … termN} Query Vector = {term1, term2 }

TF/ IDF 算法 Okapi BM25 (BM = Best Match) Phrase Ranking

Rocchio 相关度反馈算法

向量空间模型的优缺点

优点 考虑到了 Term出现的频率 相对更好的相关度排序

缺点 不适合处理超长文件

或者同一集合上,文件长度的尺寸差距很大 检索的 Term必须完全匹配 不考虑语用(同义词、近义词) CJK 短语支持 ...

其他的模型?

全文检索 概率模型

文档集合分为两部分 相关文档 不相关文档 每个查询词贡献相关度

LSI检索

隐含语义索引 LSI (Latent Semantic Index) 1988年由 S.T. Dumais等人提出,主要用于自然语言理解,通过统计的方法对文档的进行语义分析,发掘同义词,相关词组等等

直接匹配关键词的问题 同一个概念可以用多个词表达 将查询视为一篇文档,并对其进行奇异值分解

算法原理: (terms) x (documents)= (matrix) X分解为三个矩阵 T0, S0, D0'(D0的转置 )的积 降维

涉及的内容

全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划

开源检索系统的对比分析

开源传万世,因有我参与 常见开源的全文检索系统一览

Lucene / Nutch / Solr APL Sphinx / Coreseek GPL/商业授权 Xapian GPL Lemur (支持 Language Model) BSD

非主流 Zettair Terrier ....

如何评价检索系统?

检索精度( F-Score) 查全率、查准率(相关度)

可以处理的数据规模、系统架构 使用的检索模型(概率|向量空间|语言) 特性:

字段检索、自定义排序、属性过滤 正向索引?反向索引?分布式支持 接口的丰富程度 业务的其他需要

没有圣杯!

检索系统特性一览特性 Lucene Sphinx

(Coreseek)Xapian Lemur

开发语言 Java C/C++ C/C++ C/C++

索引存储结构 专用格式 专用格式 B+ 树 B+ 树

正向、反向索引 支持 仅反向 * 支持 支持

自定义排序 支持,需要改源码

支持 部分支持 支持

字段的支持 支持 支持 * 不支持 支持

TermID的算法 顺序编号 CRC64* Hash Unknown

分布式支持 Nutch 支持 N/A 支持

涉及的内容

全文检索可以解决的业务系统问题 全文检索的历史回顾 全文检索的模型 开源的全文检索系统介绍 基于 Sphinx的全文检索系统规划

Why I choose Sphinx

Terabyte Index 良好的文档支持 与 LAMP软件栈紧密集成 唯一可选的 C/C++检索系统(@2006) Lucene 不适用于复杂检索(@2006) I hate Java

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;

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

Coreseek(Sphinx) VS Lucene

Coreseek ( Sphinx) 开箱即用的产品 ( LAMP) 支持各种数据来源( via Python Source) 内置中文分词( ...) 商业支持

Lucene Java 人力成本低 库结构设计,修改容易 第三方工具? 分布式?

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

Sphinx 优势

BM25 Ranker phrase base ranking Boosts (sub) phrase matches Perfect match is guaranteed to be ranked #1 内置 Grouping、分布式支持

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

吹牛时间(酒精考验的 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)

Q&A

top related