`
forfuture1978
  • 浏览: 412166 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

本文csdn中的位置http://blog.csdn.net/forfuture1978/archive/2009/10/30/4745802.aspx

 

Lucene总的来说是:

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

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

 

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

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

 

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

 

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

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

 

  • 索引过程如下:
    • 创建一个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》)

 

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

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

 

另:

博客园此文章链接为:http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623596.html

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

  • 大小: 54.2 KB
  • 大小: 29.2 KB
  • 大小: 91.3 KB
  • 大小: 47 KB
分享到:
评论
11 楼 panawala 2013-10-19  
10 楼 fanlei77 2012-03-13  
看后觉得书白买了,楼主的文章更加清晰易懂
9 楼 RonQi 2011-10-27  
high_java 写道
非常好的文章,感谢您的分享。照这个理论,我可以将数据库中表中的数据先在文件系统建立索引,然后如果想搜索的话,就直接在索引中搜索,既方便又快捷

但是,如果加入权限管理的话,也就是说,每个人搜索的范围不一样的话,该怎样建立索引呢?是将所有的数据建立一次索引,还是根据不同的搜索者建立不同的索引?

有没有方法,将数据库中的data建立一次索引,然而还是能够根据权限来进行搜索,将权限搜索加入到lucene里面?

那你数据库的权限怎么做的?我觉得最简单的方法就是加字段进行判断吧,Lucene也能加字段,根据不同资料的不同授权进行条件搜索,比如权限用数字表示,可以存一个字段为0~10,某个权限为5的用户就搜索此字段小于6的数据。
个人想法,纯属交流。
8 楼 linvar 2011-09-19  

真心好文呐
7 楼 confident_f 2011-09-14  
xiewanzhi 写道
公司要用,研究一下,十分感谢,正在考虑权限问题。

权限问题解决了吗?
6 楼 xiewanzhi 2011-05-16  
公司要用,研究一下,十分感谢,正在考虑权限问题。
5 楼 high_java 2010-08-26  
非常好的文章,感谢您的分享。照这个理论,我可以将数据库中表中的数据先在文件系统建立索引,然后如果想搜索的话,就直接在索引中搜索,既方便又快捷

但是,如果加入权限管理的话,也就是说,每个人搜索的范围不一样的话,该怎样建立索引呢?是将所有的数据建立一次索引,还是根据不同的搜索者建立不同的索引?

有没有方法,将数据库中的data建立一次索引,然而还是能够根据权限来进行搜索,将权限搜索加入到lucene里面?
4 楼 youjianbo_han_87 2010-08-18  
不错啊。哥们
3 楼 woainichenxueming 2010-04-28  
好文章,谢谢分享!讲的不错!
2 楼 lsk 2010-03-03  
很清晰. 简单明了
1 楼 linliangyi2007 2010-02-26  
简洁明了,逻辑清晰,好文

相关推荐

    Lucene 3.0 原理与代码分析PDF

    Lucene学习总结之二:Lucene的总体架构 Lucene学习总结之三:Lucene的索引文件格式(1) Lucene学习总结之三:Lucene的索引文件格式(2) Lucene学习总结之三:Lucene的索引文件格式(3) Lucene学习总结之四:...

    24 Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1).doc

    24 Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1)

    Lucene学习总结之一:全文检索的基本原理[归纳].pdf

    Lucene学习总结之一:全文检索的基本原理[归纳].pdf

    Lucene 3.0 原理与代码分析

    本系列文章将详细描述几乎最新版本的Lucene的基本...Lucene学习总结之二:Lucene的总体架构 http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623596.html Lucene学习总结之三:Lucene的索引文件格式(1) ...

    Lucene 3.0 原理与代码分析完整版

    1.2 Lucene学习总结之二:Lucene的总体架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.3 Lucene学习总结之三:Lucene的索引文件格式 (1) . . . . . . . . ....

    lucene学习lucene学习

    lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习...

    lucene-core-7.7.0-API文档-中文版.zip

    Maven坐标:org.apache.lucene:lucene-core:7.7.0; 标签:apache、lucene、core、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...

    lucene学习总结

    lucene学习总结:lucene全文检索的原理,索引文件的格式,lucene的整体架构

    lucene-sandbox-6.6.0-API文档-中文版.zip

    Maven坐标:org.apache.lucene:lucene-sandbox:6.6.0; 标签:apache、lucene、sandbox、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...

    Lucene 学习总结文档

    有关Lucene 学习总结的文档,可能没有别人那么美观,那么完整,但也是经过了我自己辛苦的整理,这是我初学Lucene是总结的,希望对初学者有帮助吧!

    lucene-6.5.0工具包

    官网的lucene全文检索引擎工具包,下载后直接解压缩即可使用

    lucene使用总结笔记

    lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记

    lucene学习总结文档

    lucene是一个全文搜索框架,它提供接口,由用户自由实现。 本资源为对lucene的学习+收集

    lucene-core-7.2.1-API文档-中文版.zip

    Maven坐标:org.apache.lucene:lucene-core:7.2.1; 标签:apache、lucene、core、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...

    IKAnalyzer中文分词支持lucene6.5.0版本

    由于林良益先生在2012之后未对IKAnalyzer进行更新,后续lucene分词接口发生变化,导致不可使用,所以此jar包支持lucene6.0以上版本

    Lucene的的学习资料及案例

    Lucene的的学习资料及案例,包括一个lucene的学习资料总结。供大家学习使用,也有本人写的一个小案例。

    lucene-core-6.6.0-API文档-中文版.zip

    Maven坐标:org.apache.lucene:lucene-core:6.6.0; 标签:core、apache、lucene、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...

    Lucene之删除索引

    Lucene之删除索引 Lucene之删除索引 Lucene之删除索引 http://blog.csdn.net/nupt123456789/article/details/10666105

    lucene个人总结

    个人关于lucene 3.5放入一些总结

    lucene学习

    Lucene的基础知识 1、案例分析:什么是全文检索,如何实现全文检索 2、Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3、配置开发环境 4、创建索引库 5、查询索引库 6、分析器的分析过程 a) 测试分析器的分词...

Global site tag (gtag.js) - Google Analytics