`
deepfuture
  • 浏览: 4411686 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80124
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70327
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103582
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:286541
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15050
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67781
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32290
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46075
社区版块
存档分类
最新评论

lucene-索引文件格式

阅读更多

索引文件结构

Lucene使用文件扩展名标识不同的索引文件,文件名标识不同版本或者代(generation)的索引片段(segment)。如.fnm文件存储域Fields名称及其属性,.fdt存储文档各项域数据,.fdx存储文档在fdt中的偏移位置即其索引文件,.frq存储文档中term位置数据,.tii文件存储term字典,.tis文件存储term频率数据,.prx存储term接近度数据,.nrm存储调节因子数据,另外segments_X文件存储当前最新索引片段的信息,其中X为其最新修改版本,segments.gen存储当前版本即X值,这些文件的详细介绍上节已说过了。

下面的图描述了一个典型的lucene索引文件列表:

 

如果将它们的关系划成图则如下所示:

 

这些文件中存储数据的详细结构是怎样的呢,下面几个小节逐一介绍它们,熟悉它们的结构非常有助于优化Lucene的查询和索引效率和存储空间等。

 

 

3.2每个Index包含的单个文件

下面几节介绍的文件存在于每个索引index中,并且只有一份。

3.2.1 Segments文件

 

索引中活动(active)的Segments被存储在segment info文件中,segments_N,在索引中可能会包含一个或多个segments_N文件。然而,最大一代的那个文件(the one with largest generation)是活动的片断文件(这时更旧的segments_N文件依然存在(are present)是因为它们暂时(temporarily)还不能被删除,或者,一个writer正在处理提交请求(in the process of committing),或者一个用户定义的(customIndexDeletionPolicy正被使用)。这个文件按照名称列举每一个片断(lists each segment by name),详细描述分离的标准(seperate norm)和要删除的文件(deletion files),并且还包含了每一个片断的大小。

 

2.1版本来说,还有一个文件segments.gen。这个文件包含了该索引中当前生成的代(current generation)(segments_N中的_N)。这个文件仅用于一个后退处理(fallback)以防止(in case)当前代(current generation)不能被准确地(accurately)通过单独地目录文件列举(by directory listing alone)来确定(determened)(由于某些NFS客户端因为基于时间的目录(time-based directory)的缓存终止(cache expiration)而引起)。这个文件简单地包含了一个int32的版本头(version header)(SegmentInfos.FORMAT_LOCKLESS=-2),遵照代的记录(followed by the generation recorded)规则,对int64来说会写两次(write twice)。

 

版本

包含的项

数目

类型

描述

2.1之前版本

Format

1

Int32

Lucene1.4中为-1,而在Lucene 2.1中为-3SegmentsInfos.FORMAT_SINGLE_NORM_FILE

Version

1

Int64

统计在删除和添加文档时,索引被更改了多少次。

NameCounter

1

Int32

用于为新的片断文件生成新的名字。

SegCount

1

Int32

片断的数目

SegName

SegCount

String

片断的名字,用于所有构成片断索引的文件的文件名前缀。

SegSize

SegCount

Int32

包含在片断索引中的文档的数目。

2.1及之后版本

Format

1

Int32

Lucene 2.1Lucene 2.2中为-3SegmentsInfos.FORMAT_SINGLE_NORM_FILE

Version

1

Int64

同上

NameCounter

1

Int32

同上

SegCount

1

Int32

同上

SegName

SegCount

String

同上

SegSize

SegCount

Int32

同上

DelGen

SegCount

Int64

为分离的删除文件的代的数目(generation count of the separate deletes file),如果值为-1,表示没有分离的删除文件。如果值为0,表示这是一个2.1版本之前的片断,这时你必须检查文件是否存在_X.del这样的文件。任意大于0的值,表示有分离的删除文件,文件名为_X_N.del

HasSingleNormFile

SegCount

Int8

该值如果为1,表示Norm域(field)被写为一个单一连接的文件(single joined file)中(扩展名为.nrm),如果值为0,表示每一个fieldnorms被存储为分离的.fN文件中,参考下面的“标准化因素(Normalization Factors)”

NumField

SegCount

Int32

表示NormGen数组的大小,如果为-1表示没有NormGen被存储。

NormGen

SegCount * NumField

Int64

记录分离的标准文件(separate norm file)的代(generation),如果值为-1,表示没有normGens被存储,并且当片断文件是2.1之前版本生成的时,它们全部被假设为0assumed to be 0)。而当片断文件是2.1及更高版本生成的时,它们全部被假设为-1。这时这个代(generation)的意义与上面DelGen的意义一样。

IsCompoundFile

SegCount

Int8

记录是否该片断文件被写为一个复合的文件,如果值为-1表示它不是一个复合文件(compound file),如果为1则为一个复合文件。另外如果值为0,表示我们需要检查文件系统是否存在_X.cfs

2.3

Format

1

Int32

Lucene 2.3中为-4 (SegmentInfos.FORMAT_SHARED_DOC_STORE)

Version

1

Int64

同上

NameCounter

1

Int32

同上

SegCount

1

Int32

同上

SegName

SegCount

String

同上

SegSize

SegCount

Int32

同上

DelGen

SegCount

Int64

同上

DocStoreOffset

1

Int32

如果值为-1则该segment有自己的存储文档的fields数据和term vectors的文件,并且DocStoreSegment, DocStoreIsCompoundFile不会存储。在这种情况下,存储fields数据(*.fdt*.fdx文件)以及term vectors数据(*.tvf*.tvd*.tvx文件)的所有文件将存储在该segment下。另外,DocStoreSegment将存储那些拥有共享的文档存储文件的segmentDocStoreIsCompoundFile值为1如果segment存储为compound文件格式(如.cfx文件),并且DocStoreOffset值为那些共享文档存储文件中起始的文档编号,即该segment的文档开始的位置。在这种情况下,该segment不会存储自己的文档数据文件,而是与别的segment共享一个单一的数据文件集。

[DocStoreSegment]

1

String

如上

[DocStoreIsCompoundFile]

1

Int8

如上

HasSingleNormFile

SegCount

Int8

同上

NumField

SegCount

Int32

同上

NormGen

SegCount * NumField

Int64

同上

IsCompoundFile

SegCount

Int8

同上

2.4及以上

Format

1

Int32

Lucene 2.4中为-7 (SegmentInfos.FORMAT_HAS_PROX)

Version

1

Int64

同上

NameCounter

1

Int32

同上

SegCount

1

Int32

同上

SegName

SegCount

String

同上

SegSize

SegCount

Int32

同上

DelGen

SegCount

Int64

同上

DocStoreOffset

1

Int32

同上

[DocStoreSegment]

1

String

同上

[DocStoreIsCompoundFile]

1

Int8

同上

HasSingleNormFile

SegCount

Int8

同上

NumField

SegCount

Int32

同上

NormGen

SegCount * NumField

Int64

同上

IsCompoundFile

SegCount

Int8

同上

DeletionCount

SegCount

Int32

记录该segment中删除的文档数目

HasProx

SegCount

Int8

值为1表示该segment中至少一个fieldsomitTf设置为false,否则为<span style="font-size: 10pt; font-family:

分享到:
评论

相关推荐

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

    赠送Maven依赖信息文件:lucene-core-7.2.1.pom; 包含翻译后的API文档:lucene-core-7.2.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-core:7.2.1; 标签:apache、lucene、core、...

    lucene-core-2.9.4,lucene-core-3.0.2,lucene-core-3.0.3,lucene-core-3.4.0

    - **文档处理增强**:引入了对PDF、HTML等更多文件格式的支持,使得Lucene可以处理更广泛的数据源。 - **多线程支持**:在3.0系列中,Lucene增强了对多线程环境的支持,允许并发索引和检索操作,提升性能。 3. **...

    lucene-core-2.9.2.jar

    2. 索引过程:Lucene的索引过程包括分析(Analyzer)、术语文档表(Term Document Matrix)生成和倒排索引(Inverted Index)的构建。分析阶段将输入文本拆分成有意义的单元——术语,然后创建术语文档表,最后构建...

    lucene-索引(index).pdf

    Lucene索引文件格式是其内部设计的关键部分,它决定了索引的效率和性能。索引文件通常存储在磁盘上,由多个独立的文件组成,每个文件负责存储不同类型的信息,如文档信息、词汇信息、频率信息等。这种设计允许Lucene...

    lucene-core-3.0.2.jar,lucene-demos-3.0.2.jar

    无论是对单个文件的索引,还是在Web环境中的集成应用,Lucene都展现出了其灵活性和实用性。对于任何需要在大量文本数据中进行高效检索的项目,Lucene都是一个值得考虑的选择。然而,随着技术的不断发展,后续的版本...

    lucene-codecs-4.4.0.zip

    在Lucene 4.4.0中,代码库包括了多种编码解码器,如Lucene40PostingsFormat、Lucene42PostingsFormat等,它们分别负责不同的索引数据结构的序列化和反序列化。这些编码解码器的设计允许开发者根据实际需求选择最优化...

    lucene-5.0.0 完整资源(包含Jar包)

    1. **JAR文件**:这些是实际的Lucene库文件,包括核心库和其他相关模块,例如`lucene-core-5.0.0.jar`、`lucene-analyzers-common-5.0.0.jar`等。它们包含了Lucene的类和方法,供你的Java项目引用。 2. **源代码**...

    最新全文检索 lucene-5.2.1 入门经典实例

    - **Directory**:索引的存储位置,可以是文件系统、内存或数据库。 5. **QueryParser**: - 处理用户输入的查询字符串,转化为Lucene可以理解的Query对象。 6. **Query**: - 表示用户查询的抽象类,例如...

    lucene-memory-3.0.1.jar

    “lucene-memory-3.0.1.jar”这个特定的jar文件包含了实现内存索引所需的所有类和资源。其中,`org.apache.lucene.index.memory`包下包含了一系列用于内存索引操作的核心类,如`MemoryIndex`和`MemoryReader`。`...

    最全的lucene-2.4.0jar包

    4. **示例和文档**:除了库文件外,这个压缩包可能还包含示例代码和解说文档,帮助开发者更好地理解和使用Lucene。示例通常包括如何创建索引、执行查询、使用特定的Analyzer以及Highlighter等。 在使用Lucene-2.4.0...

    MMAnalyzer 分词必导入jar包(lucene-core-2.4.1.jar je-analysis-1.5.3.jar)

    `lucene-core-2.4.1.jar`是Lucene的核心库,包含了Lucene的基础组件和API,如文档处理、索引操作、查询构造等,这些是MMAnalyzer进行分词工作所必需的。 在实际项目中,正确导入这两个JAR包是确保MMAnalyzer正常...

    Lucene-core-2.0.0

    - **索引**: Lucene通过分析文档内容,将其转换成倒排索引,使得搜索效率极高。倒排索引是Lucene的核心数据结构。 - **Analyzer**: 分析器负责将输入文本分解为关键词,进行标准化处理,如去除停用词、词形还原等...

    je-analysis-1.5.3;lucene-core-2.9.2

    在IT行业中,jar(Java Archive)包是一种广泛使用的文件格式,主要用于封装Java类库,使得开发者可以方便地分发和使用这些库。本话题聚焦于"je-analysis-1.5.3"和"lucene-core-2.9.2"这两个特定的jar包。 首先,...

    lucene-4.0.0-src.zip 【Lucene 4.0.0源码包src , source】

    2. **配置构建路径**:确保所有依赖的JAR文件已添加到项目的构建路径中,这通常包括Lucene自身的库和其他Apache Commons库。 3. **代码浏览与调试**:现在,你可以浏览源码,使用Eclipse的代码导航功能(如"Ctrl+...

    lucene索引文件格式介绍

    以下是对Lucene索引文件格式的详细说明。 首先,我们要理解Lucene索引的基本结构。一个Lucene索引位于一个文件夹中,这个文件夹包含了多个段(Segment)。每个段是独立的,包含了一组文档,并且可以与其他段合并。...

    lucene-4.2.1-src.tgz

    5. **文档存储**:`Directory`接口表示索引的存储位置,如文件系统或内存。`Document`对象用于存储文档内容,`Field`对象则定义了文档字段的特性,如是否被索引、是否被存储等。 6. **更新和删除**:`IndexWriter`...

    apache-lucene-analyzers.jar

    这个名为"apache-lucene-analyzers.jar"的文件是Lucene项目的一部分,主要包含了各种分析器(analyzers)的实现,它们在处理文本数据时起着至关重要的作用。 在Lucene中,分析器是将用户输入的文本转换为可搜索索引...

    lucene-6.5.0工具包

    4. **文档处理**:能读取和索引多种格式的文件,如HTML、PDF、Word等,使得索引内容多样化。 5. **实时搜索**:Lucene的索引更新可以在短时间内完成,实现动态索引和实时搜索。 6. **内存和磁盘管理**:通过缓存...

    lucene-1.4.3

    而"lucene-1.4.3.zip"则包含了编译后的JAR文件"lucene-1.4.3.jar",这使得开发者可以直接在项目中引用Lucene库,无需重新编译源码。 在实际应用中,Lucene 1.4.3常用于网站搜索、企业内部文档检索、邮件搜索等场景...

    lucene-project.zip

    1. **创建索引(Indexing)**:这部分代码会读取数据源(如文件、数据库等),创建Lucene文档,然后使用IndexWriter将这些文档写入索引。 2. **搜索(Searching)**:用户输入查询,程序会使用Analyzer处理查询字符...

Global site tag (gtag.js) - Google Analytics