xxx.fnm
这个文件是最重要的文件,存储了Field的名字和Field的属性。 生成时先生成此文件,加载时也现价此文件,其他文件几乎都依赖于此文件。
在这个文件中,Field之间没有做排序。同时这个文件也决定了每个Field的编号,第一个Field是0,第二个Field是1,以此类推。在其他文件中引用到Field时,都是使用Field的编号。
相关代码:
void FieldInfos::write(IndexOutput* output) const{
output->writeVInt(static_cast<int32_t>(size()));
FieldInfo* fi;
uint8_t bits;
for (size_t i = 0; i < size(); ++i) {
fi = fieldInfo(i);
bits = 0x0;
if (fi->isIndexed) bits |= IS_INDEXED;
if (fi->storeTermVector) bits |= STORE_TERMVECTOR;
if (fi->storePositionWithTermVector) bits |= STORE_POSITIONS_WITH_TERMVECTOR;
if (fi->storeOffsetWithTermVector) bits |= STORE_OFFSET_WITH_TERMVECTOR;
if (fi->omitNorms) bits |= OMIT_NORMS;
if (fi->storePayloads) bits |= STORE_PAYLOADS;
output->writeString(fi->name,_tcslen(fi->name));
output->writeByte(bits);
}
}
如:
第一个字节02 表示个数,04表示第一个字段的大小,后面接着4个字节为内空,然后01为属性,08表示第二个字段的大小,最后一个字节0F表示第二个字节的属性值.