中文(中国)更改
 
powered by
Hawk Search
Hawk Search

 
分类

 
文章

 
日历

三月 2010
« 四    
1234567
891011121314
15161718192021
22232425262728
293031  
 
 
Javen-Studio Thinking of Life, Imagination of Future.
NEWS

Annotated Lucene:第三节 索引文件结构(6)

3.2.3.5 Positions位置信息数据(.prx)

Positions位置信息数据文件(.prx文件)容纳了每一个term出现在所有文档中的位置的列表。注意如果在fields中的omitTf设置为true时将不会在此文件中存储任何信息,并且如果索引中所有fields中的omitTf都设置为true,此.prx文件将不会存在。

版本

包含的项

数目

类型

描述

全部版本

TermPositions

TermCount

TermPositions

按照term顺序排序,term是隐含的(?implicit),来自.tis文件。

TermPositions->Positions

DocFreq

Positions

按文档编号递增的顺序排序。

Positions->PositionDelta

Freq

VInt

如果termfieldspayloads被禁用,则取值为term出现在该文档中当前位置与前一个位置的差值(第一个位置取值0)。如果payloads被启用,则取值为当前位置与上一个位置之间差值的2倍。如果payloads启用并且PositionDelta为单数,则PayloadLength被存储,表示当前位置的payloads的长度。

Positions->Payload?

Freq

Payload

Payload->PayloadLength?

1

VInt

Payload->PayloadData

PayloadLength

byte

结构如下图所示:

例如,如果一个term的TermPositions为一个文档中出现的第4个term,并且为后来的文档(subsequent document)中出现的第5个和第9个term,则将被存储为下面的VInt数据序列(payloads禁用):

4, 5, 4

PayloadData是与term的当前位置相关联元数据(metadata),如果该位置的PayloadLength被存储,则它表示此payload的长度。如果PayloadLength没存储,则此payload与前一个位置的payload拥有相等的PayloadLength。

3.2.3.6 Norms调节因子文件(.nrm)

在Lucene 2.1版本之前,每一个索引都有一个norm文件给每一个文档都保存了一个字节。对每一个文档来说,那些.f[0-9]*包含了一个字节容纳一个被编码的分数,值为对hits结果集来说在那个field中被相乘得出的分数(multiplied into the score)。每一个分离的norm文件在适当的时候(when adequate)为复合的(compound)和非复合的segment片断创建,格式如下:

Norms (.f[0-9]*) –> SegSize

在Lucene 2.1及以上版本,只有一个norm文件容纳了所有norms数据:

版本

包含的项

数目

类型

描述

2.1及之后版本

NormsHeader

1

raw

‘N’,'R’,'M’,Version4个字节,最后字节表示该文件的格式版本,当前为-1

Norms

NumFieldsWithNorms

Norms

Norms->Byte

SegSize

Byte

每一个字节编码了一个float指针数值,bits 0-2 容纳 3-bit 尾数(mantissa),bits 3-8容纳 5-bit 指数(exponent),这些被转换成一个IEEE单独的float数值,如图所示

NormsHeader->Version

1

Byte

结构如下图所示:

一个分离的norm文件在一个存在的segment的norm数据被更改的时候被创建,当field N被修改时,一个分离的norm文件.sN被创建,用来维护该field的norm数据。

发表评论