索引文件结构
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]
分享到:
相关推荐
操作系统课程设计 设计便于直接存取的索引文件结构,混合索引(含源代码,设计报告)
操作系统课程设计,模拟基于直接存取得索引文件结构
索引结构文件包括一级索引,二级索引 #include #include #include #include #include #define BLOCKNUM 8000 //磁盘物理块个数 #define DIRECT_ADDR_NUM 10 //直接寻址地址个数 #define INDEXTABLE_NUM 100 //...
索引的数据结构 索引的数据结构 1、什么是索引 在关系型数据库中,索引是⼀种单独的、物理的对数据库表中⼀列或多列的值进⾏排序的⼀种存储结构,它是某个表中⼀列或若⼲列值的集 合和相应的指向表中物理标识这些值...
它是文档检索系统中最常用的数据结构。 有两种不同的反向索引形式: 1、一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。 2、一个单词的水平反向索引(或者完全反向索引)又包含每个...
SDU数据结构课程设计----文件索引 B树实现 c++ 带详细文档
计算机专业操作系统课程设计:文件结构。适合大学生用,需要别的题目找我也有
该算法利用有序的键值(Key-Value)结构将相关节点和边尽可能地以相邻的方式 存储,并为高效的属性查询和邻居查询分别构造二级索引和 hash 节点索引。此外,为了节省存储空间,GComIdx 算法采用压缩算法来降低图数据...
在大型搜索引擎的查询处理过程中,对索引文件的顺序遍历将导致响应时间过长,自索引结构能够有效解决上述问题。为了进一步缩短查询时间,通过对当前索引文件自索引结构的分析,设计了倒排链表的多层自索引结构。此...
综合索引文件和查找算法做的学生信息管理程序 用C语言写的 有源代码 课程设计报告和可执行的程序
数据结构课程设计 山东大学版 文件索引 文件索引 B树实现 VC++6.0 附有报告文档
本书是《Data Structure and Algorithm Analysis In C》及其习题答案。作者更加精炼并强化了他对算法及数据结构方面创新的处理方法。通过C程序来实现。
数据结构课程设计 图书管理 用B树对书号索引
微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。
针对DSPdigital signal processor,...以顺序数组的方式将树状索引结构存储到连续的内存空间中, 便于导出为数据文件存储及进一步加载到DSP内存中使用。实验表明, 该索引结构能够快速有效地在DSP平台完成特征点匹配工作。
这学期数据结构的课程设计,用B—树模拟索引文件。
采用平衡二叉树索引关键字,可以体会数据结构用法,也可用于项目,完全开源
通过分析linux ext2文件系统,自主实现一个支持2级索引节点的文件系统。提交源代码、运行界面截图和课程设计报告。
数据结构课设——基于C开发的学生成绩管理系统(具有索引文件功能实现)源码 基本功能如下: 1.录入学生信息 2.打印学生信息 3.保存学生信息 4.读取学生信息 5.统计所有学生人数 6.修改学生信息 7.删除学生信息 8....