Your SlideShare is downloading. ×
Lucene漫谈
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Lucene漫谈

1,359

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,359
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
33
Comments
0
Likes
3
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

Transcript

  • 1. Lucene 漫谈 -- 入门及介绍 ZekChang Twitter:@ZekChang Mail:zekchang@gmail.com
  • 2. Outline
    • Lucene 是什么?
    • Lucene 能做什么?
    • Lucene 怎样做到这些?
    • 一个非常简单的搜索引擎
  • 3. Part One :什么是 Lucene
  • 4. Keywords
    • Lucene :
    • 1 、搜索引擎
    • 2 、全文信息检索
    • 3 、非完整应用
    • 4 、工具包
    • 5 、基于 Java
    • 6 、开源项目
  • 5. Summary
    • Apache Lucene 是一个基于 Java 全文搜索引擎,利用它可以轻易地为 Java 软件加入全文搜寻功能。
    • Lucene 不是一个完整的搜索应用程序,而是一个基于 Java 的全文信息检索工具包,为你的应用程序提供索引和搜索功能,可以方便的嵌入到各种应用中实现针对应用的全文索引 / 检索功能。
    • Lucene  目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 
  • 6. History
    • 贡献者:
    • Doug Cutting 是一位资深全文索引 / 检索专家,曾经是 V-Twin 搜索引擎 (Apple 的 Copland 操作系统的成就之一 ) 的主要开发者。作为 Lucene 和 Nutch 两大 Apach Open Source Project 的始创人 ( 其实还有 Lucy, Lucene4C 和 Hadoop 等相关子项目 ) , Doug Cutting 一直为搜索引擎的开发人员所关注。他终于在为 Yahoo 以 Contractor 的身份工作 4 年后,于 06 年正式以 Employee 的身份加入 Yahoo 。他贡献出的 Lucene 的目标是为各种中小型应用程序加入全文检索功能。
    • 发展历程:
    • 最先发布在作者自己的 www.lucene.com ,后来发布在 Source Forge , 2001 年年底成为 APACHE 基金会 jakarta 的一个子项目: http://jakarta.apache.org/lucene/
  • 7. Tip: Lucene VS Nutch
    • Lucene 是一个提供全文文本搜索的函数库,它不是一个应用软件。
    • 它提供很多 API 函数让你可以运用到各种实际应用程序中。
    • Nutch 是一个建立在 Lucene 核心之上的 Web 搜索的实现,它是一个真正的应用程序。
  • 8. Part Two : Lucene 能做什么
  • 9. Lucene 的创新   Lucene 其他开源全文检索系统 增量索引和批量索引 可以进行 增量的索引 ( Append) ,可以对于大量数据进行批量索引,并且接口设计用于优化批量索引和小批量的增量索引。 很多系统只支持批量的索引,有时数据源有一点增加也需要重建索引。 数据源 Lucene 没有定义具体的数据源,而是一个文档的结构,因此可以 非常灵活的适应各种应用 (只要前端有合适的转换器把数据源转换成相应结构), 很多系统只针对网页,缺乏其他格式文档的灵活性。 索引内容抓取 Lucene 的文档是由 多个字段 组成的,甚至可以控制那些字段需要进行索引,那些字段不需要索引,近一步索引的字段也分为需要分词和不需要分词的类型:    需要进行分词的索引,比如:标题,文章内容字段    不需要进行分词的索引,比如:作者 / 日期字段 缺乏通用性,往往将文档整个索引了
  • 10. Lucene 的创新 语言分析 通过 语言分析器的不同扩展实现 : 可以过滤掉不需要的词: an the of 等, 西文语法分析:将 jumps jumped jumper 都归结成 jump 进行索引 / 检索 非英文支持:对亚洲语言,阿拉伯语言的索引支持 缺乏通用接口实现 查询分析 通过查询分析接口的实现,可以 定制自己的查询语法规则 : 比如: 多个关键词之间的 + - and or 关系等   并发访问 能够 支持多用户 的使用  
  • 11. 本质
  • 12. 来一点想象:
    • 站内新闻索引,建立资料库
    • 高效的对一个数据库进行全文检索
    • 利用其扩展接口,做自己的搜索引擎
    • ……
  • 13. Performance
  • 14. Powered By Lucene http://wiki.apache.org/jakarta-lucene/PoweredBy
  • 15. Part Three : Lucene In Action !
  • 16. 几个重要概念
    • analyzer          Analyzer 是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语。
    • document          用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等等。一条记录经过索引之后,就是以一个 Document 的形式存储在索引文件中的。用户进行搜索,也是以 Document 列表的形式返回。
    • field          一个 Document 可以包含多个信息域,例如一篇文章可以包含“标题”、“正文” 等信息域,这些信息域就是通过 Field 在 Document 中存储的。
    •   Field 有两个属性可选:存储和索引。通过存储属性你可以控制是否对这个 Field 进行存储;通过索引属性你可以控制是否对该 Field 进行索引。
  • 17. 几个重要概念
    • term          term 是搜索的最小单位,它表示文档的一个词语, term 由两部分组成:它表示的词语和这个词语所出现的 field 。
    •   tocken          tocken 是 term 的一次出现,它包含 trem 文本和相应的起止偏移,以及一个类型字符串。一句话中可以出现多次相同的词语,它们都用同一个 term 表示,但是用不同的 tocken ,每个 tocken 标记该词语出现的地方。
    • segment          添加索引时并不是每个 document 都马上添加到同一个索引文件,它们首先被写入到不同的小文件,然后再合并成一个大索引文件,这里每个小文件都是一个 segment 。 
    •  
  • 18. 工作方式  
  • 19. Lucene 的结构
    • Lucene :
    • Core--core 是 lucene 稳定的核心部分
    • Sandbox--sandbox 包含了一些附加功能,例如各种分析器。
  • 20. Core 的组成 对于外部应用来说, 索引模块 (index) 、检索模块 (search) 是主要的外部应用入口
  • 21. Core 的组成
    • analysis          Analysis 包含一些内建的分析器,例如按空白字符分词的 WhitespaceAnalyzer ,添加了 stopwrod 过滤的 StopAnalyzer ,最常用的是 StandardAnalyzer 。
    • document          Document 包含文档的数据结构,例如 Document 类定义了存储文档的数据结构, Field 类定义了 Document 的一个域。 
    • index          Index 包含了索引的读写类,例如对索引文件的 segment 进行写、合并、优化的 IndexWriter 类和对索引进行读取和删除操作的 IndexReader 类。
    • queryParser          QueryParser 包含了解析查询语句的类。 Lucene 有很多种 Query 类,它们都继承自 Query ,执行各种特殊的查询, QueryParser 的作用就是解析查询语句,按顺序调用各种 Query 类查找出结果。 
  • 22. Core 的组成
    • search          Search 包含了从索引中搜索结果的各种类,例如刚才说的各种 Query 类,包括 TermQuery 、 BooleanQuery 等就在这个包里。
    • store          Store 包含了索引的存储类,例如 Directory 定义了索引文件的存储结构, FSDirectory 为存储在文件中的索引, RAMDirectory 为存储在内存中的索引, MmapDirectory 为使用内存映射的索引。
    • util          Util 包含一些公共工具类,例如时间和字符串之间的转换工具。  
  • 23. 简单实践 1-- 建立索引 建立索引的最简单的代码
  • 24. 简单实践 2-- 尝试搜索 尝试搜索的最简单的代码
  • 25. 简单实践 3--Hack The Analyzer 内置的 StandardAnalyzer 对于中英文字符流的实际处理测试
  • 26. 简单实践 4-- 中文分词改进
    • SandBox 中提供的 Analyzer
      • ChineseAnalyzer
      • CJKAnalyzer
    • http://lucene.apache.org/java/2_3_2/lucene-sandbox/index.html
    • 中科院 ICTCLAS
      •   imdict-chinese-analyzer 是  imdict 智能词典的智能中文分词模块,作者高小平,算法基于隐马尔科夫模型 (Hidden Markov Model, HMM) ,是中国科学院计算技术研究所的 ictclas 中文分词程序的重新实现(基于 Java ),可以直接为 lucene 搜索引擎提供中文分词支持。
      • http://www.ictclas.org/
  • 27. Part Four :一个简单的搜索引擎
  • 28. Really Simple
    • 三个文件:
      • Constants.java— 用静态变量来存放路径
      • LuceneIndex.java— 用来建立索引
      • LuceneSearch.java— 用来进行搜索
    • 演示
  • 29. More…
    • 定制优化自己的 Analyzer
    • 处理多种文档格式( PDF 、 doc 、 html etc.)
    • Lucene Port:Perl,Python,C++,.Net…etc.
    • SandBox
    • ……
  • 30. Thank you!
  • 31. Q&A
  • 32. Reference
    • [1] 征服 Ajax+Lucene 构建搜索引擎 作者 :  李刚 出版社 :  人民邮电出版社
    • [2]Lucene 漫谈—入门与介绍 http://wishlife.javaeye.com/blog/186861
    • [3] Lucene :基于 Java 的全文检索引擎简介 作者:车东 http://www.chedong.com/tech/lucene.html
    • [4]Lucene in action 作者: Otis Gospodnetic , Erik Hatcher

×