`
zhujyy
  • 浏览: 6681 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

索引文件结构

阅读更多
索引文件结构

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),或者一个用户定义的(custom)IndexDeletionPolicy正被使用)。这个文件按照名称列举每一个片断(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中为-3(SegmentsInfos.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.1和Lucene 2.2中为-3(SegmentsInfos.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,表示每一个field的norms被存储为分离的.fN文件中,参考下面的“标准化因素(Normalization Factors)”

NumField


SegCount


Int32


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

NormGen


SegCount * NumField


Int64


记录分离的标准文件(separate norm file)的代(generation),如果值为-1,表示没有normGens被存储,并且当片断文件是2.1之前版本生成的时,它们全部被假设为0(assumed 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将存储那些拥有共享的文档存储文件的segment。DocStoreIsCompoundFile值为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中至少一个fields的omitTf设置为false,否则为<span style="font-size: 10pt; font-family:[align=left][/align]
分享到:
评论

相关推荐

    操作系统课程设计 便于直接存取的索引文件结构_模拟基于直接存取得索引文件结构_

    操作系统课程设计中的“便于直接存取的索引文件结构”是一个关键的概念,它涉及到了文件系统管理和数据存储的高效方式。在计算机系统中,文件是数据的主要组织形式,而文件的存储方式对系统的性能有着重要影响。直接...

    操作系统课程设计 便于直接存取的索引文件结构

    在操作系统课程设计中,构建便于直接存取的索引文件结构是一项重要的实践任务,这是因为索引文件结构对于数据存储和检索的效率具有显著影响。 在传统的文件系统中,文件通常按照连续分配或链接分配的方式存储,但这...

    优化位置索引结构的版本

    本文主要研究了针对包含多个文档版本的集合(即版本化文档集合)中的位置索引结构优化问题。这类文档集合在实际应用中非常常见,例如网络档案、维基百科等其他维基系统以及源代码管理系统中的文件和文档。由于需要...

    index,索引,多维索引数据结构

    索引是一种特殊的数据结构,用于加速数据库表中数据的查找、排序和连接操作。它减少了数据访问的时间,提高了查询效率,尤其是在处理大量数据时。在这里,我们可能讨论的是关系型数据库管理系统(RDBMS)如MySQL、...

    数据结构课程设计 索引顺序查找

    另外,"数据结构课程设计报告.doc"和"索引顺序查找任务书.doc"文件可能包含了项目的详细描述、设计思路、算法分析、性能评估以及可能遇到的问题和解决方案。这些文档将帮助你深入理解索引顺序查找的原理和实现细节,...

    一种高效的倒排索引存储结构.pdf

    1. **压缩技术**:通过压缩技术减小索引文件的大小,从而降低磁盘访问的成本。 2. **倒排表内容优化**:例如按照词频降序排列单词,这样可以减少搜索时需要访问的数据量。 3. **磁盘存储结构管理**:通过合理的磁盘...

    深入浅出理解索引结构

    本文将深入浅出地探讨索引结构,旨在帮助读者理解其原理、类型以及如何影响数据库性能。 首先,我们要明白索引的基本概念。索引类似于书籍的目录,允许我们快速定位到所需的信息,而无需逐页翻阅。在数据库中,索引...

    Lucene索引文件格式

    本文将深入解析Lucene 1.3版本的索引文件结构,帮助读者理解其内部运作机制。 首先,我们要理解Lucene索引的基本概念。索引是由文档(document)、域(field)和项(term)构成的层次结构。文档是由一系列域组成的...

    文件结构实验

    主要目的是让学生理解并模拟设计文件的存储结构,特别是索引文件结构。下面将详细解释文件结构的基础知识、索引文件的特点及其构建过程。 ### 文件结构基础知识 #### 1. 文件结构定义 文件结构指的是文件中信息的...

    索引类型-说明(索引文件有数据文件和索引表文件组成)

    索引文件通常由数据文件和索引表文件组成。数据文件存储实际的数据记录,而索引表文件则包含记录的关键字以及这些记录在数据文件中的位置。这种结构使得数据的查找速度显著提高。索引表中的关键字是用于快速定位记录...

    文件结构上机实习指导

    本次实习旨在让学生理解文件的逻辑结构、存储结构和存取方式之间的关系,通过模拟设计MS-DOS的链接文件结构和索引文件结构,加深对文件系统工作原理的理解,并实际操作文件的创建、插入记录等操作,以提升理论与实践...

    索引的存储结构与方式

    B树是一种自平衡的多路搜索树,适用于大型数据库和文件系统的索引存储。它的特点在于每个节点可以有多个子节点,且所有叶子节点都在同一层,保证了数据的有序性。在数据库中,B树索引通常用于实现主键或唯一索引。 ...

    nachos二级索引文件系统结题报告及源代码

    在本项目中,我们主要探讨的是“nachos二级索引文件系统”,这是一个与操作系统相关的实验,特别是关于文件系统的改进。 Nachos是一个开源的操作系统教学平台,它为学生提供了理解和实现操作系统基本概念的机会。在...

    文件索引的创建 文件索引的创建 文件索引的创建

    在给定的压缩包文件中,`getidx.pbl`、`getidx.pbt`和`getidx.pbw`可能是某种数据库或文件系统的索引文件。`.pbl`可能是索引的定义文件,`.pbt`可能包含索引的元数据,而`.pbw`可能是与索引相关的权重或其他配置信息...

    数据结构课程设计----文件索引

    总的来说,这个数据结构课程设计项目旨在让学生深入理解文件索引的重要性,并通过实践掌握B树这一核心数据结构的实现。通过完成这个项目,学生将能够应用所学知识解决实际问题,提升他们在数据管理和检索领域的技能...

    数据结构课程设计(应用索引文件和查找算法的学生信息管理程序)

    在这个“数据结构课程设计”中,我们关注的是一个学生信息管理程序,该程序利用了索引文件和查找算法来高效地处理和检索学生数据。以下是关于这个项目的一些关键知识点的详细说明: **索引文件**: 索引文件是一种...

    索引的数据结构.pdf

    《索引的数据结构》 索引,作为数据库系统中不可或缺的一部分,它的主要作用在于提高数据检索的速度。在关系型数据库中,索引是一种独立的、物理的存储结构,用于对表中一列或多列的值进行排序,并通过一组逻辑指针...

    数据结构严蔚敏版 建立词索引表

    词索引表是一种用于存储文本数据(如书籍、文档)中关键词的数据结构,它允许用户快速查找包含特定词汇的段落或页面。在建立词索引表的过程中,通常会涉及到以下几个关键步骤和相关知识点: 1. **预处理**:首先,...

Global site tag (gtag.js) - Google Analytics