Lucene 漫谈 -- 入门及介绍 ZekChang Twitter:@ZekChang Mail:zekchang@gmail.com
Outline <ul><li>Lucene 是什么? </li></ul><ul><li>Lucene 能做什么? </li></ul><ul><li>Lucene 怎样做到这些? </li></ul><ul><li>一个非常简单的搜索引擎 ...
Part One :什么是 Lucene
Keywords <ul><li>Lucene : </li></ul><ul><li>1 、搜索引擎 </li></ul><ul><li>2 、全文信息检索 </li></ul><ul><li>3 、非完整应用 </li></ul><ul><...
Summary <ul><li>Apache Lucene 是一个基于 Java 全文搜索引擎,利用它可以轻易地为 Java 软件加入全文搜寻功能。 </li></ul><ul><li>Lucene 不是一个完整的搜索应用程序,而是一个基于  ...
History <ul><li>贡献者: </li></ul><ul><li>Doug Cutting 是一位资深全文索引 / 检索专家,曾经是 V-Twin 搜索引擎 (Apple 的 Copland 操作系统的成就之一 ) 的主要开发者。作...
Tip: Lucene VS Nutch <ul><li>Lucene 是一个提供全文文本搜索的函数库,它不是一个应用软件。 </li></ul><ul><li>它提供很多 API 函数让你可以运用到各种实际应用程序中。 </li></ul><...
Part Two : Lucene 能做什么
Lucene 的创新   Lucene 其他开源全文检索系统 增量索引和批量索引 可以进行 增量的索引 ( Append) ,可以对于大量数据进行批量索引,并且接口设计用于优化批量索引和小批量的增量索引。 很多系统只支持批量的索引,有时数据源有...
Lucene 的创新 语言分析 通过 语言分析器的不同扩展实现 : 可以过滤掉不需要的词: an the of  等, 西文语法分析:将 jumps jumped jumper 都归结成 jump 进行索引 / 检索 非英文支持:对亚洲语言,阿...
本质
来一点想象: <ul><li>站内新闻索引,建立资料库 </li></ul><ul><li>高效的对一个数据库进行全文检索 </li></ul><ul><li>利用其扩展接口,做自己的搜索引擎 </li></ul><ul><li>…… </li...
Performance
Powered By Lucene http://wiki.apache.org/jakarta-lucene/PoweredBy
Part Three : Lucene In Action !
几个重要概念 <ul><li>analyzer          Analyzer 是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语。 </li></ul><ul><li>document           用...
几个重要概念 <ul><li>term          term 是搜索的最小单位,它表示文档的一个词语, term 由两部分组成:它表示的词语和这个词语所出现的 field 。 </li></ul><ul><li>  tocken     ...
工作方式  
Lucene 的结构 <ul><li>Lucene : </li></ul><ul><li>Core--core 是 lucene 稳定的核心部分 </li></ul><ul><li>Sandbox--sandbox 包含了一些附加功能,例如各...
Core 的组成 对于外部应用来说, 索引模块 (index) 、检索模块 (search) 是主要的外部应用入口
Core 的组成 <ul><li>analysis          Analysis 包含一些内建的分析器,例如按空白字符分词的 WhitespaceAnalyzer ,添加了 stopwrod 过滤的 StopAnalyzer ,最常用的是...
Core 的组成 <ul><li>search          Search 包含了从索引中搜索结果的各种类,例如刚才说的各种 Query 类,包括 TermQuery 、 BooleanQuery 等就在这个包里。 </li></ul><u...
简单实践 1-- 建立索引 建立索引的最简单的代码
简单实践 2-- 尝试搜索 尝试搜索的最简单的代码
简单实践 3--Hack The Analyzer 内置的 StandardAnalyzer 对于中英文字符流的实际处理测试
简单实践 4-- 中文分词改进 <ul><li>SandBox 中提供的 Analyzer </li></ul><ul><ul><li>ChineseAnalyzer </li></ul></ul><ul><ul><li>CJKAnalyzer...
Part Four :一个简单的搜索引擎
Really Simple <ul><li>三个文件: </li></ul><ul><ul><li>Constants.java— 用静态变量来存放路径 </li></ul></ul><ul><ul><li>LuceneIndex.java— ...
More… <ul><li>定制优化自己的 Analyzer </li></ul><ul><li>处理多种文档格式( PDF 、 doc 、 html etc.) </li></ul><ul><li>Lucene Port:Perl,Pytho...
Thank you!
Q&A
Reference <ul><li>[1] 征服 Ajax+Lucene 构建搜索引擎 作者 :  李刚 出版社 :  人民邮电出版社 </li></ul><ul><li>[2]Lucene 漫谈—入门与介绍  http://wishlife....
Upcoming SlideShare
Loading in …5
×

Lucene漫谈

1,358 views
1,181 views

Published on

some basic things about Lucene

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,358
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
22
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lucene漫谈

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

×