CLucene中索引生成的文件格式和內容

xxx.fnm
這個文件是最重要的文件,存儲了Field的名字和Field的屬性。 生成時先生成此文件,加載時也現價此文件,其餘文件幾乎都依賴於此文件。ui

  在這個文件中,Field之間沒有作排序。同時這個文件也決定了每一個Field的編號,第一個Field是0,第二個Field是1,以此類推。在其餘文件中引用到Field時,都是使用Field的編號。 orm

è¿éåå¾çæè¿°
  

相關代碼:blog

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);
    }
}it

如:io

第一個字節02 表示個數,04表示第一個字段的大小,後面接着4個字節爲內空,而後01爲屬性,08表示第二個字段的大小,最後一個字節0F表示第二個字節的屬性值.ast