Lucene40FieldInfosFormat
字段名存储在字段信息文件中,后缀为.fnm。
文件
FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount
数据类型:
- Header --> CodecHeader
- FieldsCount --> VInt
- FieldName --> String
- FieldBits, DocValuesBits --> Byte
- FieldNumber --> VInt
- Attributes --> Map<String,String>
文件描述:
- FieldsCount: 此文件中的字段数.
- FieldName: 作为UTF-8字符串的字段名称.
- FieldNumber: 字段的编号。请注意,与先前版本的Lucene不同,字段不是由文件中的顺序隐式编号,而是显式编号
- FieldBits: 包含字段选项的字节.
- 低位是针对索引字段的位,对于非索引字段是零
- 对于存储有term向量的字段,第二个最低位是1,对于没有term向量的字段,第二个最低位是0
- 如果设置了第三个最低位(0x4),则除了位置之外,还会将偏移存储到posting列表中。
- 第四位没有被使用
- 如果设置了第五个最低位(0x10),则索引字段将省略norms
- 如果设置了第六个最低位(0x20),则为索引字段存储payload
- 如果设置了第七个最低位(0x40),则索引字段省略了term频率和位置
- 如果设置了第八个最低位(0x80),则索引字段的位置被省略
- DocValuesBits: 包含每个文档值类型的字节,记录为两个四位整数的类型,高位表示 norms选项,低位表示 DocValues选项,每个四位整数可以这样解码:
- 0: 此字段没有DocValues
- 1: 可变宽度有符号整数(Type#VAR_INTS VAR_INTS)
- 2: 32位浮点值(Type#FLOAT_32 FLOAT_32)
- 3: 64位浮点值(Type#FLOAT_64 FLOAT_64)
- 4: 固定长度的字节数组值(Type#BYTES_FIXED_STRAIGHT BYTES_FIXED_STRAIGHT)
- 5: 固定长度取消引用的字节数组值(Type#BYTES_FIXED_DEREF BYTES_FIXED_DEREF)
- 6: 可变长度字节数组值(Type#BYTES_VAR_STRAIGHT BYTES_VAR_STRAIGHT)
- 7: 可变长度的取消引用字节数组值。(Type#BYTES_VAR_DEREF BYTES_VAR_DEREF)
- 8: 16位有符号整数(Type#FIXED_INTS_16 FIXED_INTS_16)
- 9: 32位有符号整数(Type#FIXED_INTS_32 FIXED_INTS_32)
- 10: 64位有符号整数(Type#FIXED_INTS_64 FIXED_INTS_64)
- 11: 8位有符号整数(Type#FIXED_INTS_8 FIXED_INTS_8)
- 12: 固定长度排序的字节数组值(Type#BYTES_FIXED_SORTED BYTES_FIXED_SORTED)
- 13: 可变长度排序的字节数组值(Type#BYTES_VAR_SORTED BYTES_VAR_SORTED)
- Attributes: 编解码器 - 私有属性的键值映射
Lucene40StoredFieldsFormat
存储的字段由两个文件表示:
1.字段索引或者 .fdx 文件.
这用于查找特定文档字段的字段数据文件中的位置,因为它包含固定长度的数据,所以很容易地随机访问该文件。文档n的字段数据的位置在此文件中Uint64值为 n * 8。
对于每个文档,它包含指向其字段数据的指针,如下所示:
- FieldIndex (.fdx) --> <Header>, <FieldValuesPosition> SegSize
- Header --> CodecHeader
- FieldValuesPosition --> Uint64
2.字段数据或者 .fdt 文件.
它包含每个文档的存储字段,如下所示:
- FieldData (.fdt) --> <Header>, <DocFieldData> SegSize
- Header --> CodecHeader
- DocFieldData --> FieldCount, <FieldNum, Bits, Value> FieldCount
- FieldCount --> VInt
- FieldNum --> VInt
- Bits --> Byte
- 低位保留.
- 第二位是包含二进制数据的字段的第二位
- 第三位保留.
- 第4到第6位(掩码:0x7 << 3)定义数字字段的类型:
- 如果没有numeric 字段,则清除掩码中的所有位
- 1<<3: Value是Int
- 2<<3: Value是Long
- 3<<3: Value是Float转换的Int (例如 Float.intBitsToFloat(int)
- 4<<3: Value是Double转换的Long (例如 Double.longBitsToDouble(long)
- Value --> String | BinaryValue | Int | Long (depending on Bits)
- BinaryValue --> ValueSize, <Byte>^ValueSize
- ValueSize --> VInt
网友评论