• Like
Sphinx 全文检索实践指南
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Sphinx 全文检索实践指南

  • 2,750 views
Published

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

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,750
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
58
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Boolean 在 20 世纪 80 年代非常流行,直到现在,很多传统系统仍然在使用 Boolean 模型进行工作。 传统的研究者认为, Boolean 模型可以精确的找到他们想要的内容,而不会丢失信息 现代的研究发现,基于统计的模型往往比人工精心调整的 Boolean 检索式带来更好的结果
  • 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 的文档的总书目。
  • http://ccl.pku.edu.cn/doubtfire/NLP/Artificial_Intelligence/Latent%20Semantic%20Indexing.txt

Transcript

  • 1. LAMP 人主题分享交流会 LAMPER.CN
  • 2. Coreseek/Sphinx 全文检索实践指南
    • 李沫南
    • 2011-05-03
  • 3. 涉及的内容
    • 全文检索可以解决的业务系统问题
    • 全文检索的历史回顾
    • 全文检索的模型
    • 开源的全文检索系统介绍
    • 基于 Sphinx 的全文检索系统规划
  • 4. 全文检索可以解决的业务系统问题
    • 列表展示
    • 内容检索
    • 相关内容推荐
    • 统计分析
  • 5. 全文检索 VS 数据库检索
    • SELECT * FROM documents WHERE title like '%test%'
      • CPU 100%
      • '30 秒内只能进行一次查询 '
      • 没有找到记录 ...
    • 如何解决?
      • 为了提升数据库的性能,在某些字段上建索引
      • 答案:在全文字段上加索引
  • 6. 数据库的全文索引
    • 全文索引字段,数据库的标配功能
      • MySQL / PostgreqSQL
      • SQL Server / Oracle
    • 问题:
      • 影响记录的存取性能
      • 非标准的检索语法
      • 切分规则?
      • 排序规则?
      • Too slow while indexing real-world dataset
  • 7. 涉及的内容
    • 全文检索可以解决的业务系统问题
    • 全文检索的历史回顾
    • 全文检索的模型
    • 开源的全文检索系统介绍
    • 基于 Sphinx 的全文检索系统规划
  • 8. No Magic - 倒排索引
    • 比普通数据库检索快几倍 ~ 几百倍的性能提升
    • 预读取、预切分
    • 想想新华字典
    • 倒排索引(反向索引)
      • Term1 -> Doc1(pos1, pos2, pos...), Doc2, Doc3 …
    • 正向索引
      • Doc1 -> Term1(pos1, pos2, pos ...)
  • 9. 全文检索技术的宗教传统
    • 线上的查经工具
      • http://abibletool.net/search.aspx
      • 哥林多前书 13:8 " 爱是恒久忍耐、又有恩慈.爱是不嫉妒.爱是不自夸.不张狂. "
  • 10. 倒排索引历史
    • 主后 1230 年,根据拉丁文 圣经 编制
      • 主持者 Hugo de Sancto Charo 雨果
      • 参与着 500 多人
    • 主后 1550 年,第一部英文的词索引
      • 编者 John Marbeck
    • 计算机出现后,计算机辅助编制索引
      • 70~80 年代, MAT 程序族
  • 11. 圣经倒排索引的假设
    • 所有词语具有一样的重要性
    • 不考虑词语出现的先后顺序
    • 分章、分节
    • 不考虑排序(按照出现的先后顺序排序)
  • 12. 涉及的内容
    • 全文检索可以解决的业务系统问题
    • 全文检索的历史回顾
    • 全文检索的模型
    • 开源的全文检索系统介绍
    • 基于 Sphinx 的全文检索系统规划
    • SEO & SEM 全文检索引擎的视角
  • 13. 全文检索的最简化模型
    • Word Of Bag
      • 把文档作为一个口袋
      • Term 是口袋中的元素
      • [ 假设 ] 元素之间
        • 地位平等
        • 顺序无关
        • 独立分布
    • Boolean 检索
      • 非此即彼的二元世界观
      • a AND b , a OR b, a NOT b
  • 14. 全文检索 向量空间模型
    • 把文档视为一个向量
      • Document Vector = {term1, term2, … termN}
      • Query Vector = {term1, term2 }
    • TF/ IDF 算法
      • Okapi BM25 (BM = Best Match)
      • Phrase Ranking
    • Rocchio 相关度反馈算法
  • 15. 向量空间模型的优缺点
    • 优点
      • 考虑到了 Term 出现的频率
      • 相对更好的相关度排序
    • 缺点
      • 不适合处理超长文件
        • 或者同一集合上,文件长度的尺寸差距很大
      • 检索的 Term 必须完全匹配
      • 不考虑语用(同义词、近义词)
      • CJK 短语支持 ...
    • 其他的模型?
  • 16. 全文检索 概率模型
    • 文档集合分为两部分
      • 相关文档
      • 不相关文档
      • 每个查询词贡献相关度
  • 17. LSI 检索
    • 隐含语义索引 LSI (Latent Semantic Index)
      • 1988 年由 S.T. Dumais 等人提出,主要用于自然语言理解,通过统计的方法对文档的进行语义分析,发掘同义词,相关词组等等
      • 直接匹配关键词的问题
      • 同一个概念可以用多个词表达
      • 将查询视为一篇文档,并对其进行奇异值分解
    • 算法原理:
      • (terms) x (documents) = (matrix)
      • X 分解为三个矩阵 T0, S0, D0'(D0 的转置 ) 的积
      • 降维
  • 18. 涉及的内容
    • 全文检索可以解决的业务系统问题
    • 全文检索的历史回顾
    • 全文检索的模型
    • 开源的全文检索系统介绍
    • 基于 Sphinx 的全文检索系统规划
  • 19. 开源检索系统的对比分析
    • 开源传万世,因有我参与
    • 常见开源的全文检索系统一览
      • Lucene / Nutch / Solr APL
      • Sphinx / Coreseek GPL/ 商业授权
      • Xapian GPL
      • Lemur ( 支持 Language Model) BSD
    • 非主流
      • Zettair Terrier ....
  • 20. 如何评价检索系统?
    • 检索精度( F-Score)
      • 查全率、查准率(相关度)
    • 可以处理的数据规模、系统架构
    • 使用的检索模型(概率|向量空间|语言)
    • 特性:
      • 字段检索、自定义排序、属性过滤
      • 正向索引?反向索引?分布式支持
      • 接口的丰富程度
      • 业务的其他需要
    • 没有圣杯!
  • 21. 检索系统特性一览 特性 Lucene Sphinx (Coreseek) Xapian Lemur 开发语言 Java C/C++ C/C++ C/C++ 索引存储结构 专用格式 专用格式 B+ 树 B+ 树 正向、反向索引 支持 仅反向 * 支持 支持 自定义排序 支持,需要改源码 支持 部分支持 支持 字段的支持 支持 支持 * 不支持 支持 TermID 的算法 顺序编号 CRC64* Hash Unknown 分布式支持 Nutch 支持 N/A 支持
  • 22. 涉及的内容
    • 全文检索可以解决的业务系统问题
    • 全文检索的历史回顾
    • 全文检索的模型
    • 开源的全文检索系统介绍
    • 基于 Sphinx 的全文检索系统规划
  • 23. Why I choose Sphinx
    • Terabyte Index
    • 良好的文档支持
    • 与 LAMP 软件栈紧密集成
    • 唯一可选的 C/C++ 检索系统( @2006 )
    • Lucene 不适用于复杂检索( @2006 )
    • I hate Java
  • 24. 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;
  • 25. 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
  • 26. Coreseek(Sphinx) VS Lucene
    • Coreseek ( Sphinx )
      • 开箱即用的产品 ( LAMP )
      • 支持各种数据来源( via Python Source )
      • 内置中文分词( ... )
      • 商业支持
    • Lucene
      • Java 人力成本低
      • 库结构设计,修改容易
      • 第三方工具?
      • 分布式?
  • 27. 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
  • 28. Sphinx 优势
    • BM25 Ranker
    • phrase base ranking
    • Boosts (sub) phrase matches
    • Perfect match is guaranteed to be ranked #1
    • 内置 Grouping 、分布式支持
  • 29. 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
  • 30. 吹牛时间(酒精考验的 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 )
  • 31. Q&A