狠狠撸

狠狠撸Share a Scribd company logo
Lucene 漫谈 -- 入门及介绍 ZekChang Twitter:@ZekChang Mail:zekchang@gmail.com
Outline Lucene 是什么? Lucene 能做什么? Lucene 怎样做到这些? 一个非常简单的搜索引擎
Part One :什么是 Lucene
Keywords Lucene : 1 、搜索引擎 2 、全文信息检索 3 、非完整应用 4 、工具包 5 、基于 Java 6 、开源项目
Summary Apache?Lucene 是一个基于 Java 全文搜索引擎,利用它可以轻易地为 Java 软件加入全文搜寻功能。 Lucene 不是一个完整的搜索应用程序,而是一个基于  Java  的全文信息检索工具包,为你的应用程序提供索引和搜索功能,可以方便的嵌入到各种应用中实现针对应用的全文索引 / 检索功能。   Lucene? 目前是  Apache Jakarta  家族中的一个开源项目。也是目前最为流行的基于  Java  开源全文检索工具包。?
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/
Tip: Lucene VS Nutch Lucene 是一个提供全文文本搜索的函数库,它不是一个应用软件。 它提供很多 API 函数让你可以运用到各种实际应用程序中。 Nutch 是一个建立在 Lucene 核心之上的 Web 搜索的实现,它是一个真正的应用程序。
Part Two : Lucene 能做什么
Lucene 的创新   Lucene 其他开源全文检索系统 增量索引和批量索引 可以进行 增量的索引 ( Append) ,可以对于大量数据进行批量索引,并且接口设计用于优化批量索引和小批量的增量索引。 很多系统只支持批量的索引,有时数据源有一点增加也需要重建索引。 数据源 Lucene 没有定义具体的数据源,而是一个文档的结构,因此可以 非常灵活的适应各种应用 (只要前端有合适的转换器把数据源转换成相应结构), 很多系统只针对网页,缺乏其他格式文档的灵活性。 索引内容抓取 Lucene 的文档是由 多个字段 组成的,甚至可以控制那些字段需要进行索引,那些字段不需要索引,近一步索引的字段也分为需要分词和不需要分词的类型: ?? 需要进行分词的索引,比如:标题,文章内容字段 ?? 不需要进行分词的索引,比如:作者 / 日期字段 缺乏通用性,往往将文档整个索引了
Lucene 的创新 语言分析 通过 语言分析器的不同扩展实现 : 可以过滤掉不需要的词: an the of  等, 西文语法分析:将 jumps jumped jumper 都归结成 jump 进行索引 / 检索 非英文支持:对亚洲语言,阿拉伯语言的索引支持 缺乏通用接口实现 查询分析 通过查询分析接口的实现,可以 定制自己的查询语法规则 : 比如: 多个关键词之间的  + - and or 关系等   并发访问 能够 支持多用户 的使用  
本质
来一点想象: 站内新闻索引,建立资料库 高效的对一个数据库进行全文检索 利用其扩展接口,做自己的搜索引擎 ……
Performance
Powered By Lucene http://wiki.apache.org/jakarta-lucene/PoweredBy
Part Three : Lucene In Action !
几个重要概念 analyzer? ??????? Analyzer 是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语。 document? ???????  用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等等。一条记录经过索引之后,就是以一个 Document 的形式存储在索引文件中的。用户进行搜索,也是以 Document 列表的形式返回。 field? ???????  一个 Document 可以包含多个信息域,例如一篇文章可以包含“标题”、“正文” 等信息域,这些信息域就是通过 Field 在 Document 中存储的。   ? Field 有两个属性可选:存储和索引。通过存储属性你可以控制是否对这个 Field 进行存储;通过索引属性你可以控制是否对该 Field 进行索引。
几个重要概念 term? ??????? term 是搜索的最小单位,它表示文档的一个词语, term 由两部分组成:它表示的词语和这个词语所出现的 field 。 ? tocken? ??????? tocken 是 term 的一次出现,它包含 trem 文本和相应的起止偏移,以及一个类型字符串。一句话中可以出现多次相同的词语,它们都用同一个 term 表示,但是用不同的 tocken ,每个 tocken 标记该词语出现的地方。 segment? ???????  添加索引时并不是每个 document 都马上添加到同一个索引文件,它们首先被写入到不同的小文件,然后再合并成一个大索引文件,这里每个小文件都是一个 segment 。? ?
工作方式 ?
Lucene 的结构 Lucene : Core--core 是 lucene 稳定的核心部分 Sandbox--sandbox 包含了一些附加功能,例如各种分析器。
Core 的组成 对于外部应用来说, 索引模块 (index) 、检索模块 (search) 是主要的外部应用入口
Core 的组成 analysis? ??????? Analysis 包含一些内建的分析器,例如按空白字符分词的 WhitespaceAnalyzer ,添加了 stopwrod 过滤的 StopAnalyzer ,最常用的是 StandardAnalyzer 。 document? ??????? Document 包含文档的数据结构,例如 Document 类定义了存储文档的数据结构, Field 类定义了 Document 的一个域。? index? ??????? Index 包含了索引的读写类,例如对索引文件的 segment 进行写、合并、优化的 IndexWriter 类和对索引进行读取和删除操作的  IndexReader 类。 queryParser? ??????? QueryParser 包含了解析查询语句的类。 Lucene 有很多种 Query 类,它们都继承自 Query ,执行各种特殊的查询, QueryParser 的作用就是解析查询语句,按顺序调用各种  Query 类查找出结果。?
Core 的组成 search? ??????? Search 包含了从索引中搜索结果的各种类,例如刚才说的各种 Query 类,包括 TermQuery 、 BooleanQuery 等就在这个包里。 store? ??????? Store 包含了索引的存储类,例如 Directory 定义了索引文件的存储结构, FSDirectory 为存储在文件中的索引, RAMDirectory 为存储在内存中的索引, MmapDirectory 为使用内存映射的索引。 util? ??????? Util 包含一些公共工具类,例如时间和字符串之间的转换工具。??
简单实践 1-- 建立索引 建立索引的最简单的代码
简单实践 2-- 尝试搜索 尝试搜索的最简单的代码
简单实践 3--Hack The Analyzer 内置的 StandardAnalyzer 对于中英文字符流的实际处理测试
简单实践 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/
Part Four :一个简单的搜索引擎
Really Simple 三个文件: Constants.java— 用静态变量来存放路径 LuceneIndex.java— 用来建立索引 LuceneSearch.java— 用来进行搜索 演示
More… 定制优化自己的 Analyzer 处理多种文档格式( PDF 、 doc 、 html etc.) Lucene Port:Perl,Python,C++,.Net…etc. SandBox ……
Thank you!
Q&A
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

More Related Content

Similar to 尝耻肠别苍别漫谈 (20)

第五章-2
第五章-2第五章-2
第五章-2
jxhtq
?
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Action
yiditushe
?
Elasticsearch 簡介
Elasticsearch 簡介Elasticsearch 簡介
Elasticsearch 簡介
Pei-Hsun Kao
?
资源整合与奥别产2.0
资源整合与奥别产2.0资源整合与奥别产2.0
资源整合与奥别产2.0
Shanghai Library
?
资源整合与奥别产2.0
资源整合与奥别产2.0资源整合与奥别产2.0
资源整合与奥别产2.0
Shanghai Library
?
Kevenjiaoda
KevenjiaodaKevenjiaoda
Kevenjiaoda
guest0c88ee
?
第五章-1
第五章-1 第五章-1
第五章-1
jxhtq
?
资源探索服务之功能评估指标
资源探索服务之功能评估指标资源探索服务之功能评估指标
资源探索服务之功能评估指标
皓仁 柯
?
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
HonestQiao
?
Elastic stack day-1
Elastic stack day-1Elastic stack day-1
Elastic stack day-1
YI-CHING WU
?
ElasticSearch Introduction
ElasticSearch IntroductionElasticSearch Introduction
ElasticSearch Introduction
TsungWei Hu
?
闯补惫补相关基础知识
闯补惫补相关基础知识闯补惫补相关基础知识
闯补惫补相关基础知识
yiditushe
?
Fast Esp搜索系统
Fast Esp搜索系统Fast Esp搜索系统
Fast Esp搜索系统
xiaochawan
?
第叁章
第叁章第叁章
第叁章
jxhtq
?
必备的 Java 参考资源列表
必备的 Java 参考资源列表必备的 Java 参考资源列表
必备的 Java 参考资源列表
wensheng wei
?
Introduction the Repository Pattern
Introduction the Repository PatternIntroduction the Repository Pattern
Introduction the Repository Pattern
Bill Lin
?
陽明大學/FHIR 快速跳坑指南
陽明大學/FHIR 快速跳坑指南陽明大學/FHIR 快速跳坑指南
陽明大學/FHIR 快速跳坑指南
Lorex L. Yang
?
Ajax Lucence
Ajax LucenceAjax Lucence
Ajax Lucence
Roger Xia
?
Java 推荐读物
Java 推荐读物Java 推荐读物
Java 推荐读物
yiditushe
?
Information Retrieval
Information RetrievalInformation Retrieval
Information Retrieval
yxyx3258
?
第五章-2
第五章-2第五章-2
第五章-2
jxhtq
?
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Action
yiditushe
?
第五章-1
第五章-1 第五章-1
第五章-1
jxhtq
?
资源探索服务之功能评估指标
资源探索服务之功能评估指标资源探索服务之功能评估指标
资源探索服务之功能评估指标
皓仁 柯
?
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
HonestQiao
?
Elastic stack day-1
Elastic stack day-1Elastic stack day-1
Elastic stack day-1
YI-CHING WU
?
ElasticSearch Introduction
ElasticSearch IntroductionElasticSearch Introduction
ElasticSearch Introduction
TsungWei Hu
?
闯补惫补相关基础知识
闯补惫补相关基础知识闯补惫补相关基础知识
闯补惫补相关基础知识
yiditushe
?
Fast Esp搜索系统
Fast Esp搜索系统Fast Esp搜索系统
Fast Esp搜索系统
xiaochawan
?
第叁章
第叁章第叁章
第叁章
jxhtq
?
必备的 Java 参考资源列表
必备的 Java 参考资源列表必备的 Java 参考资源列表
必备的 Java 参考资源列表
wensheng wei
?
Introduction the Repository Pattern
Introduction the Repository PatternIntroduction the Repository Pattern
Introduction the Repository Pattern
Bill Lin
?
陽明大學/FHIR 快速跳坑指南
陽明大學/FHIR 快速跳坑指南陽明大學/FHIR 快速跳坑指南
陽明大學/FHIR 快速跳坑指南
Lorex L. Yang
?
Java 推荐读物
Java 推荐读物Java 推荐读物
Java 推荐读物
yiditushe
?
Information Retrieval
Information RetrievalInformation Retrieval
Information Retrieval
yxyx3258
?

尝耻肠别苍别漫谈

  • 1. Lucene 漫谈 -- 入门及介绍 ZekChang Twitter:@ZekChang Mail:zekchang@gmail.com
  • 2. Outline Lucene 是什么? Lucene 能做什么? 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 关系等   并发访问 能够 支持多用户 的使用  
  • 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 。? ?
  • 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/
  • 28. Really Simple 三个文件: Constants.java— 用静态变量来存放路径 LuceneIndex.java— 用来建立索引 LuceneSearch.java— 用来进行搜索 演示
  • 29. More… 定制优化自己的 Analyzer 处理多种文档格式( PDF 、 doc 、 html etc.) Lucene Port:Perl,Python,C++,.Net…etc. SandBox ……
  • 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