Lucene学习总结之二:Lucene的总体架构

Posted on

Lucene学习总结之二:Lucene的总体架构

觉先

博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 :: 130 随笔 :: 0 文章 :: 544 评论 :: 0 引用 <2009年12月>日一二三四五六293012345678910111213141516171819202122232425262728293031123456789

公告

昵称:觉先 园龄:3年7个月 荣誉:推荐博客 粉丝:560 关注:3

+加关注

搜索

常用链接

随笔分类

随笔档案

相册

最新评论

阅读排行榜

评论排行榜

推荐排行榜

Lucene学习总结之二:Lucene的总体架构

Lucene总的来说是:

  • 一个高效的,可扩展的,全文检索库。
  • 全部用Java实现,无须配置。
  • 仅支持纯文本文件的索引(Indexing)和搜索(Search)。
  • 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。

在Lucene in action中,Lucene 的构架和过程如下图,

image

说明Lucene**是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。**

让我们更细一些看Lucene的各组件:

lucene  zong ti jia gou

  • 被索引的文档用Document对象**表示。**
  • IndexWriter**通过函数addDocument**将文档添加到索引中,实现创建索引的过程。
  • Lucene**的索引是应用反向索引。**
  • 当用户有请求时,Query**代表用户的查询语句。**
  • IndexSearcher**通过函数search搜索Lucene Index。**
  • IndexSearcher**计算term weight和score并且将结果返回给用户。**
  • 返回给用户的文档集合用TopDocsCollector**表示。**

那么如何应用这些组件呢?

让我们再详细到对Lucene API 的调用实现索引和搜索过程。

using lucene

  • 索引过程如下:

  • 创建一个IndexWriter**用来写索引文件,它有几个参数,INDEX_DIR就是索引文件所存放的位置,Analyzer便是用来对文档进行词法分析和语言处理的。**

  • 创建一个Document**代表我们要索引的文档。**
  • 将不同的Field**加入到文档中。我们知道,一篇文档有多种信息,如题目,作者,修改时间,内容等。不同类型的信息用不同的Field来表示,在本例子中,一共有两类信息进行了索引,一个是文件路径,一个是文件内容。其中FileReader的SRC_FILE**就表示要索引的源文件。
  • IndexWriter**调用函数addDocument**将索引写到索引文件夹中。
  • 搜索过程如下:

  • IndexReader**将磁盘上的索引信息读入到内存,INDEX_DIR**就是索引文件存放的位置。

  • 创建IndexSearcher**准备进行搜索。**
  • 创建Analyer**用来对查询语句进行词法分析和语言处理。**
  • 创建QueryParser**用来对查询语句进行语法分析。**
  • QueryParser**调用parser进行语法分析,形成查询语法树,放到Query中。**
  • IndexSearcher**调用search对查询语法树Query进行搜索,得到结果TopScoreDocCollector**。

以上便是Lucene API函数的简单调用。

然而当进入Lucene的源代码后,发现Lucene有很多包,关系错综复杂。

然而通过下图,我们不难发现,Lucene的各源码模块,都是对普通索引和搜索过程的一种实现。

此图是上一节介绍的全文检索的流程对应的Lucene实现的包结构。(参照http://www.lucene.com.cn/about.htm中文章《开放源代码的全文检索引擎Lucene》)

clip_image008

  • Lucene**的analysis模块主要负责词法分析及语言处理而形成Term。**
  • Lucene**的index模块主要负责索引的创建,里面有IndexWriter。**
  • Lucene**的store**模块主要负责索引的读写。
  • Lucene**的QueryParser**主要负责语法分析。
  • Lucene**的search**模块主要负责对索引的搜索。
  • Lucene**的similarity**模块主要负责对相关性打分的实现。

了解了Lucene的整个结构,我们便可以开始Lucene的源码之旅了。

另:

CSDN此文章链接为:http://blog.csdn.net/forfuture1978/archive/2009/10/30/4745802.aspx

Javaeye此文章链接为:http://forfuture1978.javaeye.com/blog/546808

分类: Lucene原理与代码分析

绿色通道: 好文要顶 关注我 收藏该文与我联系

觉先 关注 - 3 粉丝 - 560

荣誉:推荐博客 +加关注

3

0 (请您对文章做出评价)

« 上一篇:Lucene学习总结之一:全文检索的基本原理 » 下一篇:Lucene学习总结之三:Lucene的索引文件格式(1) posted on 2009-12-14 12:32 觉先 阅读(7647) 评论(2) 编辑 收藏

评论

/#1楼 2010-02-23 10:33 xuanfeng

朋友,可不可以了解一下你是用什么工具画的图啊?

支持(0)反对(0)

/#2楼[楼主]17671232010/2/23 10:57:04 2010-02-23 10:57 觉先

@xuanfeng 比较复杂的图用visio, 简单的图可以用ppt,然后另存为jpg

支持(0)反对(0) http://pic.cnitblog.com/face/u103165.jpg

刷新评论刷新页面返回顶部

注册用户登录后才能发表评论,请 登录注册访问网站首页。 博客园首页博问新闻闪存程序员招聘知识库

最新IT新闻: · 这四年 Google中国落寂了 刘允尽力了 · 在线课程“慕课”来袭 专家称大学应主动参与 · 告别编程课,MIT 展示自然语言编程 · 什么样的工程师才可能真正推动创新? · 在线教育“钱途”光明? » 更多新闻...

最新知识库文章: · 阿里巴巴集团去IOE运动的思考与总结 · 硅谷归来7点分享:创业者,做你自己 · 我为什么不能坚持? · 成为高效程序员的7个重要习惯 · 谈谈对BPM的理解 » 更多知识库文章... Powered by: 博客园 Copyright © 觉先

希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
转载请注明作者(RobinChia)和出处 It so life ,请勿用于任何商业用途