Field信息:
在DocumentWriter类中曾经描述,DocumentWriter类的一个功能是调用与
Field相关的类,写Field信息。写Field信息有两个类FieldInfos类和FieldWriter类,前者是用于写Field name信息,后者写Field value信息。
1.Field name信息:
Field name信息是用FieldInfo结构体表示,即FieldInfo表示一个Field
的name信息。FieldInfos操作所有的FieldInfo,读和写操作,类似SegmentInfo和SegmentInfos。
FieldInfo结构如下:
String name;// The name of the field
boolean isIndexed;// true if the field is indexed
int number;
boolean storeTermVector;// true if the term vector should be stored
// true if the term vector with offsets should be stored
boolean storeOffsetWithTermVector;
//true if the term vector with positions should be stored
boolean storePositionWithTermVector;
// true if the norms for the indexed field should be omitted
boolean omitNorms;
FieldInfos类和Field的关系可以看成SegmentInfos和SegInfos的关系。但FieldInfos并不像SegmentInfos一样,继承自于Vector,而是包含了容器类型的变量。这里有两个容器,ArrayList和HashMap,提供了按Name和Number两种存储。
最终,FieldInfos写的文件(fnm)结构如下:
FieldInfos (.fnm):
<ul>
<li>field的个数,int</li>
<li>field的名字,string类型<li>
<li>byte类型,记录该Field的相关信息,包括:
isIndexed,storeTermVectorstoreOffsetWithTermVector,
storePositionWithTermVector和omitNorms
每个信息用一个bit表示,1表示是,0表示否
</li>
</ul>
2.Field value信息:
FieldWriter类用于写Field的Value信息,这有两个文件fdx文件和fdt
文件。Fdx文件为域索引文件,记载相应的field在域值的指针;fdt则是域值信息。
Fdx文件中文档n的域值信息就存在n*8的位置,格式如下:
Fdx:< FieldvaluesPosition > SegSize
Fdt文件的格式如下:
Fdt:< FieldCount, <FieldNum, Bits, value>FieldCount>DocCount