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

More Related Content

PDF
Text clustering (information retrieval, in chinese)
PPT
Correlog overview presentation 20101207
PPT
Coreseek/Sphinx 全文检索实践指南
PPT
scrapy+sphinx搭建搜索引擎
PPT
Xapian介绍
PDF
Information Retrieval
PDF
开放源代码的全文检索Lucene
PPT
Lucene漫谈
Text clustering (information retrieval, in chinese)
Correlog overview presentation 20101207
Coreseek/Sphinx 全文检索实践指南
scrapy+sphinx搭建搜索引擎
Xapian介绍
Information Retrieval
开放源代码的全文检索Lucene
Lucene漫谈

Similar to Sphinx 全文检索实践指南 (18)

PPT
Lucene漫谈
PPTX
Lucene
PDF
Lucene 3[1] 0 原理与代码分析
PDF
Itpub电子杂志第四期第二稿
PPT
Java 的開放原碼全文搜尋技術 - Lucene
PPT
索引
PDF
Elastic search
PDF
搜索技术分享
PPTX
Lucene实践
PPT
Fast Esp搜索系统
PPT
基於語意網的搜尋引擎
PPTX
中文发现在澳科大实用性分析
PPT
Mysql的索引及优化策略
PDF
Solr中国6月16日讲座pp tv2
PDF
20130339广州
PPT
腾讯大讲堂25 企业级搜索托管平台介绍
PPT
腾讯大讲堂25 企业级搜索托管平台介绍
PPT
腾讯大讲堂25 企业级搜索托管平台介绍
Lucene漫谈
Lucene
Lucene 3[1] 0 原理与代码分析
Itpub电子杂志第四期第二稿
Java 的開放原碼全文搜尋技術 - Lucene
索引
Elastic search
搜索技术分享
Lucene实践
Fast Esp搜索系统
基於語意網的搜尋引擎
中文发现在澳科大实用性分析
Mysql的索引及优化策略
Solr中国6月16日讲座pp tv2
20130339广州
腾讯大讲堂25 企业级搜索托管平台介绍
腾讯大讲堂25 企业级搜索托管平台介绍
腾讯大讲堂25 企业级搜索托管平台介绍
Ad

More from Shaoning Pan (20)

PPTX
海量数据计算架构实现
PPTX
RTB 优化算法
PDF
Technology Changes
PDF
一淘广告机器学习
PDF
海量用户数据处理及其在一淘广告和推荐中的应用
PDF
大型互联网广告应用系统架构
PDF
Tanx成长之路 real time media
PDF
移动社交网络动态框架 李章晶
PPTX
移动互联网产业分析 梁文静
PPTX
曾勇 Elastic search-intro
PDF
Hadoop的etl任务—flume使用及其 优化-品友互动
PDF
互联网广告发展的趋势-品友互动
PDF
互联网行为分析和数据挖掘-品友互动
PDF
如何构建一个高可用可扩展的广告投放平台-品友互动
PDF
网站前段性能优化-品友互动
PDF
品友互动 Hadoop的etl任务—flume使用及其 优化
PPTX
分布式计算与Hadoop - 刘鹏
PPTX
Cassandra实时统计分享 - 赵伟
PPT
Android应用开发 - 沈大海
PPTX
淘宝数据魔方的系统架构 -长林
海量数据计算架构实现
RTB 优化算法
Technology Changes
一淘广告机器学习
海量用户数据处理及其在一淘广告和推荐中的应用
大型互联网广告应用系统架构
Tanx成长之路 real time media
移动社交网络动态框架 李章晶
移动互联网产业分析 梁文静
曾勇 Elastic search-intro
Hadoop的etl任务—flume使用及其 优化-品友互动
互联网广告发展的趋势-品友互动
互联网行为分析和数据挖掘-品友互动
如何构建一个高可用可扩展的广告投放平台-品友互动
网站前段性能优化-品友互动
品友互动 Hadoop的etl任务—flume使用及其 优化
分布式计算与Hadoop - 刘鹏
Cassandra实时统计分享 - 赵伟
Android应用开发 - 沈大海
淘宝数据魔方的系统架构 -长林
Ad

Sphinx 全文检索实践指南

Editor's Notes

  • #14: Boolean 在 20 世纪 80 年代非常流行,直到现在,很多传统系统仍然在使用 Boolean 模型进行工作。 传统的研究者认为, Boolean 模型可以精确的找到他们想要的内容,而不会丢失信息 现代的研究发现,基于统计的模型往往比人工精心调整的 Boolean 检索式带来更好的结果
  • #15: BM25 公式: score ( D , Q ):就是我们所要计算的评分,即为 [ 给定搜索内容 ]Q 在 [ 给定文档 ]D 中的相关程度,分数越高表示相关度越高。 q : [ 给定搜索内容 ]Q 中的语素,英文的话就是单词,中文的话需要先进行简单的切词操作。 f ( qi,D ):在 [ 给定文档 ]D 中,某一个语素 qi 出现的频率。 |D| : [ 给定文档 ]D 长度。 avgdl: 索引中所有文档长度。 另外两个参数 K1 和 b 用来调整精准度,一般情况下我们取 K1=2 , b=0.75 。 IDF 公式:是用来计算公式 1 中 IDF ( qi )的值 N :索引中文档的总数目。 n ( qi ):索引中包含语素 qi 的文档的总书目。
  • #18: http://ccl.pku.edu.cn/doubtfire/NLP/Artificial_Intelligence/Latent%20Semantic%20Indexing.txt