Annotated Lucene:第三节 索引文件结构(2)
3.2.2.2 Lock文件
写锁(write lock)文件名为“write.lock”,它缺省存储在索引目录中。如果锁目录(lock directory)与索引目录不一致,写锁将被命名为“XXXX-write.lock”,其中“XXXX”是一个唯一的前缀(unique prefix),来源于(derived from)索引目录的全路径(full path)。当这个写锁出现时,一个writer当前正在修改索引(添加或者清除文档)。这个写锁确保在一个时刻只有一个writer修改索引。
需要注意的是在2.1版本之前(prior to),Lucene还使用一个commit lock,这个锁在2.1版本里被删除了。
3.2.2.3 Deletable文件
在Lucene 2.1版本之前,有一个“deletable”文件,包含了那些需要被删除文档的详细资料。在2.1版本后,一个writer会动态地(dynamically)计算哪些文件需要删除,因此,没有文件被写入文件系统。
3.2.2.4 Compound文件(.cfs)
从Lucene 1.4版本开始,compound文件格式成为缺省信息。这是一个简单的容器(container)来服务所有下一章节(next section)描述的文件(除了.del文件),格式如下:
|
版本 |
包含的项 |
数目 |
类型 |
描述 |
|
1.4之后版本 |
FileCount |
1 |
VInt |
|
|
DataOffset |
FileCount |
Long |
|
|
|
FileName |
FileCount |
String |
|
|
|
FileData |
FileCount |
raw |
Raw文件数据是上面命名的所有单个的文件数据(the individual named above)。 |
结构如下图所示:

从Lucene 2.3 版本开始,文档存储文件(存储fields和term vectors数据)能够让多个segment共享一个单独的文件集,当compound文件启用时,这些共享的文件将被添加进一个单独的compound文件,格式同上,但是文件扩展名为.cfx。
3.2.3 每个Segment包含的文件
剩下的文件(remaining files)都是per-segment(每个片断文件),因此(thus)都用后缀来定义(defined by suffix)。
3.2.3.1 Field信息(.fnm)
Field的名字都存储在Field信息文件中,后缀是.fnm。
|
文件 |
包含的项 |
数目 |
类型 |
版本 |
描述 |
|
FieldsInfo (.fnm) |
FieldsCount |
1 |
VInt |
|
|
|
FieldName |
FieldsCount |
String |
|
|
|
|
FieldBits |
FieldsCount |
Byte |
|
最低阶的bit位(low-order bit)值为1表示是被索引的Fields,0表示非索引的Fields。 |
|
|
|
第二个最低阶的bit位(second lowest-order bit)值为1表示该Field有term向量存储(term vectors stored),0表示该field没有term向量。 |
||||
|
>=1.9 |
如果第三个最低阶的bit位(third lowest-order bit)设置(0×04),term的位置(term positions)将和term向量一起被存储(stored with term vectors)。 |
||||
|
>=1.9 |
如果第四个最低阶的bit位(fourth lowest-order bit)设置(0×08),term的偏移(term offsets)将和term向量一起被存储(stored with term vectors)。 |
||||
|
>=1.9 |
如果第五个最低阶的bit位(fifth lowest-order bit)设置(0×10),norms将对索引的field忽略掉(norms are omitted for the indexed field)。 |
||||
|
>=1.9 |
如果第六个最低阶的bit位(sixth lowest-order bit)设置(0×20),payloads将为索引的field存储(payloads are stored for the indexed field)。 |
Fields将使用它们在这个文件中的顺序来编号(fields are numbered by their order in this file)。因此Field为0表示为该文件中的第一个field,1表示下一个field,一次类推。
需要注意的是,就像文档编号(document numbers)一样,field编号(field numbers)与片断是相关的(are segment relative)。
结构如下图所示:
