lucene系统结构分析

华为防火墙USG6600全流量日志配置指南:从流量监控到NAT日志的完整方案 本文详细介绍了华为USG6600防火墙全流量日志配置方案,涵盖流量监控、NAT日志及安全事件溯源等核心功能。通过精细化配置和性能优化技巧,帮助企业构建高效、合规的日志体系,提升网络安全运维效率。文章特别强调了日志采样与字段过滤的实用方法,适用于高流量环境下的资源优化。 阅读详情

   

第二节 Lucene系统结构分析
2006-08-14 22:55

Lucene作为一个优秀的全文检索引擎,其系统结构具有强烈的面向对象特征。首先是定义了一个与平台无关的索引文件格式,其次通过抽象将系统的核心组成部分设计为抽象类,具体的平台实现部分设计为抽象类的实现,此外与具体平台相关的部分比如文件存储也封装为类,经过层层的面向对象式的处理,最终达成了一个低耦合高效率,容易二次开发的检索引擎系统。
以下将讨论Lucene系统的结构组织,并给出系统结构与源码组织图:
    从图中我们清楚的看到,Lucene的系统由基础结构封装、索引核心、对外接口三大部分组成。其中直接操作索引文件的索引核心又是系统的重点。Lucene的将所有源码分为了7个模块(在java语言中以包即package来表示),各个模块所属的系统部分也如上图所示。需要说明的是org.apache.lucene.queryPaser是做为org.apache.lucene.search的语法解析器存在,不被系统之外实际调用,因此这里没有当作对外接口看待,而是将之独立出来。
    从面象对象的观点来考察,Lucene应用了最基本的一条程序设计准则:引入额外的抽象层以降低耦合性。首先,引入对索引文件的操作org.apache.lucene.store的封装,然后将索引部分的实现建立在(org.apache.lucene.index)其之上,完成对索引核心的抽象。在索引核心的基础上开始设计对外的接口org.apache.lucene.search与org.apache.lucene.analysis。在每一个局部细节上,比如某些常用的数据结构与算法上,Lucene也充分的应用了这一条准则。在高度的面向对象理论的支撑下,使得Lucene的实现容易理解,易于扩展。
    Lucene在系统结构上的另一个特点表现为其引入了传统的客户端服务器结构以外的的应用结构。Lucene可以作为一个运行库被包含进入应用本身中去,而不是做为一个单独的索引服务器存在。这自然和Lucene开放源代码的特征分不开,但是也体现了Lucene在编写上的本来意图:提供一个全文索引引擎的架构,而不是实现。
理解Lucene系统结构的另一个方式是去探讨其中数据流的走向,并以此摸清楚Lucene系统内部的调用时序。在此基础上,我们能够更加深入的理解Lucene的系统结构组织,以方便以后在Lucene系统上的开发工作。这部分的分析,是深入Lucene系统的钥匙,也是进行重写的基础。
   我们来看看在Lucene系统中的主要的数据流以及它们之间的关系图:

索引查找逻辑
 
索引构建逻辑
 
查询语句语法分析逻辑
 
词法分析逻辑
 
流程图:文档: 查询结果流程图:顺序访问存储器: 查询语句
存储抽象
 
流程图:多文档: 索引文件流程图:多文档: 被索引文件

    图2.2很好的表明了Lucene在内部的数据流组织情况,并且沿着数据流的方向我们也可以对与Lucene内部的执行时序有一个清楚的了解。现在将图中的涉及到的流的类型与各个逻辑对应系统的相关部分的关系说明一下。
    图中共存在4种数据流,分别是文本流、token流、字节流与查询语句对象流。文本流表示了对于索引目标和交互控制的抽象,即用文本流表示了将要索引的文件,用文本流向用户输出信息;在实际的实现中,Lucene中的文本流采用了UCS-2[19]作为编码,以达到适应多种语言文字的处理的目的。Token流是Lucene内部所使用的概念,是对传统文字中的词的概念的抽象,也是Lucene在建立索引时直接处理的最小单位;简单的讲Token就是一个词和所在域值的组合,后面在叙述文件格式时也将继续涉及到token,这里不详细展开。字节流则是对文件抽象的直接操作的体现,通过固定长度的字节(Lucene定义为8比特位长,后面文件格式将详细叙述)流的处理,将文件操作解脱出来,也做到了与平台文件系统的无关性。查询语句对象流则是仅仅在查询语句解析时用到的概念,它对查询语句抽象,通过类的继承结构反映查询语句的结构,将之传送到查找逻辑来进行查找的操作。
    图中的涉及到了多种逻辑,基本上直接对应于系统某一模块,但是也有跨模块调用的问题发生,这是因为Lucene的重用程度非常好,因此很多实现直接调用了以前的工作成果,这在某种程度上其实是加强了模块耦合性,但是也是为了避免系统的过于庞大和不必要的重复设计的一种折衷体现。词法分析逻辑对应于org.apache.lucene.analysis部分。查询语句语法分析逻辑对应于org.apache.lucene.queryParser部分,并且调用了org.apache.lucene.analysis的代码。查询结束之后向评分排序逻辑输出token流,继而由评分排序逻辑处理之后给出文本流的结果,这一部分的实现也包含在了org.apache.lucene.search中。索引构建逻辑对应于org.apache.lucene.index部分。索引查找逻辑则主要是org.apache.lucene.search,但是也大量的使用了org.apache.lucene.index部分的代码和接口定义。存储抽象对应于org.apache.lucene.store。没有提到的模块则是做为系统公共基础设施存在。
通过以上的系统结构分析和数据流分析,我们已经很清楚的了解了Lucene的系统的结构特征。在此基础上,我们可以通过扩充Lucene系统来完成一个完备的全文检索引擎,紧接着还可以在全文检索引擎的基础上构建各种应用系统。鉴于本文的目的并不在此,以下我们只是略为叙述一下相关的步骤,从而给出应用开发的一些思路。
首先,我们需要的是按照目标语言的词法结构来构建相应的词法分析逻辑,实现Lucene在org.apache.lucene.analysis中定义的接口,为Lucene提供目标系统所使用的语言处理能力。Lucene默认的已经实现了英文和德文的简单词法分析逻辑(按照空格分词,并去除常用的语法词,如英语中的is,am,are等等)。在这里,主要需要参考实现的接口在org.apache.lucene.analysis中的Analyzer.java和Tokenizer.java中定义,Lucene提供了很多英文规范的实现样本,也可以做为实现时候的参考资料。其次,需要按照被索引的文件的格式来提供相应的文本分析逻辑,这里是指除开词法分析之外的部分,比如HTML文件,通常需要把其中的内容按照所属于域分门别类加入索引,这就需要从org.apache.lucene.document中定义的类document继承,定义自己的HTMLDocument类,然后就可以将之交给org.apache.lucene.index模块来写入索引文件。完成了这两步之后,Lucene全文检索引擎就基本上完备了。这个过程可以用下图表示:
    当然,上面所示的仅仅只是对于Lucene的基本扩充过程,它将Lucene由不完备的变成完备的(尤其是对于非英语的语言检索)。除此之外我们还可以在很多方面对Lucene进行改造。第一个方面即为按照文档索引的域,比如标题,作者之类的信息对返回的查询结果排序,这即需要改造Lucene的评分排序逻辑。默认的,Lucene采用其内部的相关性方法来处理评分和排序,我们可以根据需要改变它。遗憾的是,这部分Lucene并没有做到如同扩充词法解析和文档类型那样的条理清晰,没有留下很好的接口,因此需要仔细的分析其源代码的实现,自行扩充等等。其他的方面,比如改进其索引的效率,改进其返回结果时候的缓冲机制等等,都是加强Lucene系统的方面,在此也不再叙述。
    完成了Lucene系统,之后就可以开始考虑其上的应用系统开发。如果应用系统也使用java语言开发,那么Lucene系统能够方便的嵌入到整个系统中去,作为一个API集来调用。这个过程十分简单,以下便是一个示例程序,配合注释理解起来很容易。

    或者,Lucene全文检索引擎也可作为服务器程序启动,但是这就需要用户自行扩充其他应用与Lucene的接口。这个可以通过传统的包装方式,比如客户服务器结构,或者采用现在流行的Web方式。诸如此类的应用方案,本文也不再继续叙述。参考Lucene的项目网站中的用户邮件列表能找到更多的信息。
Linux ARM平台开发系列讲解(网络篇)1.3 MDIO总线设备device和设备driver匹配 在设备和驱动都载入内核后,设备和驱动是如何匹配起来的呢?其实他们就是通过的唯一标识phyID进行匹配phy_dev和phy_drv是通过phy_bus_match函数进行匹配,匹配成功后会建立链表链接,具体流程如下图: 返回总目录...... 阅读详情

相关推荐

CLucene结构文档

CLucene结构文档 内嵌源代码及各类关系图

lucene7.5的数据结构

文章目录2. lucene的数据结构2.1 索引的逻辑层次2.2 lucene 存储的数据概述2.2.1 lucene的存储模块2.2.2 lucene的一个index的文件2.2.3 lucene 的数据类型2.2.4 ducoment number2.3 正向信息的存储2.3.1 .fnm 文件2.3.1.1 一级数据2.3.1.2 二级数据Field2.3.2 XXX.fdx,XXX.fdt文件2.3.2.1 .fdt 文件2.3.2.2 .fdx 文件2.3.3 XXX.tvx,XXX.tvd2.3

寒夜 6173

Lucene系统结构

对了解Lucene系统结构非常有帮助.

搜索引擎Lucene(2):索引文件结构及格式

1、索引总体结构 1.1、索引层次结构 Lucene的索引结构主要分以下几个层次: 索引结构.png 索引(Index): 在Lucene中一个索引是放在一个文件夹中的。同一文件夹中的所有的文件构成一个Lucene索引。 段(Segment): 一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。具有相同前缀文件的属同一个段。...

yuanwei1144的博客 1527

lucence内部结构是什么?

lucence内部结构是什么?

java1234的博客 1214

lucence 内部结构是什么?思维导图 代码示例(java 架构)

请注意,这段代码只是一个非常基础的例子,适用于学习目的。此外,Lucene 的 API 和内部结构会随着版本的不同而有所变化,请确保查阅与你使用的 Lucene 版本对应的官方文档。Lucene 是一个高性能、可扩展的信息检索库,广泛用于全文搜索应用。它提供了索引和搜索文档的功能。Lucene 的内部结构相当复杂,由多个组件构成,包括索引模块、查询解析器、搜索模块等。对于思维导图,你可以使用工具如 XMind、MindMeister 或任何其他思维导图软件来创建,以图形化方式表示上述组件及其关系。

qq_33240556的博客 528

Lucene的底层数据结构与评分算法的分析(7)

Elasticsearch使用的是 term frequency/inverse document frequency算法,简称为TF/IDF算法。TF词频(Term Frequency),IDF逆向文档频率(Inverse Document Frequency)

緑水長流*z 2031

Lucene系统结构分析

Lucene作为一个优秀的全文检索引擎,其系统结构具有强烈的面向对象特征。首先是定义了一个与平台无关的索引文件格式,其次通过抽象将系统的核心组成部分设计为抽象类,具体的平台实现部分设计为抽象类的实现,此外与具体平台相关的部分比如文件存储也封装为类,经过层层的面向对象式的处理,最终达成了一个低耦合高效率,容易二次开发的检索引擎系统。 一、系统结构组织 Lucene作为一个优秀...

weixin_33681778的博客 69

开放源代码的全文检索引擎Lucene――介绍、系统结构与源码实现分析

  第一节 全文检索系统与Lucene简介··· 3一、       什么是全文检索全文检索系统?··· 3二、       什么是Lucene?··· 4三、       Lucene的应用、特点及优势··· 4四、       本文的重点问题与cLucene项目··· 5第二节 Lucene系统结构分析··· 5一、       系统结构组织··· 5二、

无花专栏--http://www.ucweb.com 3134

Lucene7.4官方示例

Lucene7.4官方示例,内含若干官方实例,可用于学习Lucene

开放源代码的全文检索引擎Lucene

第一节 全文检索系统与Lucene简介··· 3 一、 什么是全文检索全文检索系统?··· 3 二、 什么是Lucene?··· 4 三、 Lucene的应用、特点及优势··· 4 四、 本文的重点问题与cLucene项目··· 5 第二节 Lucene系统结构分析··· 5 一、 系统结构组织··· 5 二、...

weixin_30641999的博客 121

Lucene结构体系

本文主要讨论 Lucene系统结构,希望对其结构的初步分析,更深入的了解 Lucene 的运作机制,从而实现对 Lucene 的功能扩展。 1. Lucene 的包结构 Lucene 源码中共包括 7 个子包,每个包完成特定的功能: Lucene结构功能表 包名 功能 org.apache.lucene.analysi

904

Lucene 数据流分析

理解Lucene系统结构的另一个方式是去探讨其中数据流的走向,并以此摸清楚Lucene系统内部的调用时序。 在此基础上,我们能够更加深入的理解Lucene系统结构组织,以方便以后在Lucene系统上的开发工作。这部分的分析,是深入Lucene系统的钥匙,也是进行重写的基础。 我们来看看在Lucene系统中的主要的数据流以及它们之间的关系图 [img]http://www.oss...

HONEY MOOSE 370

Lucene 基础理论

1. 全文检索系统与Lucene简介 1.1 什么是全文检索全文检索系统 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。 全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中...

weixin_30512089的博客 83

详解Lucene全文检索基础架构

文章目录数据查询方法什么是LuceneLucene全文检索流程索引流程搜索流程Lucene演示索引过程索引演示搜索过程Field域类型索引维护分析器(Analyzer)Lucene原生分析器第三方中文分词器Lucene高级搜索Lucene底层储存结构(高级)词典的构建跳跃表原理FST原理Lucene优化(高级)解决大量磁盘IO选择合适的分词器选择合适的位置存放索引库 本文是bilibili-《超系统学习Lucene全文检索技术》的学习笔记。 数据查询方法 顺序扫描法 数据表中查询包含某个字符串的文档,逐行

十里清风 2095

Lucene原理(一):基本概念

Apache Lucene是Apache的一个核心开源项目,是目前最好的搜索框架。扩展性强,支持全文检索,各种各样的数据结构,支持不同的查询需求。 目前使用Apache Lucene最好的两款开源软件: Apache solr,Apache 旗下的开源搜索引擎,支持各种数据格式的检索(json、pdf、csv等),实时性较差 Elasticsearch,目前最火的开源搜索引擎,实时性...

桃花惜春风 5000

Lucene重要特性及应用案例

Lucene重要特性及应用案例

qqrrjj2011的博客 1534

sqlite-netFx35-binary-x64-2008-1.0.106.0

framework 3.5 sp1版本, sqlite-netFx35-binary-x64-2008-1.0.106.0.zip

上一篇: Hadoop分布式文件系统:架构和设计要点
下一篇: DotLucene源码浅读: Lucene.Net.Analysis
iptvspace
博客等级 码龄18年 21粉丝 5原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值