Lucene4 索引格式(一) 总览

来源:互联网 发布:适合笔记本的linux 编辑:程序博客网 时间:2024/05/18 00:52

Lucene中的索引是按照不同的层级来组织的, 最基本的概念有 索引(index), 文档(document), 字段(field) 和 词(term)

一个索引 是一系列文档的集合,一个文档是一系列字段的集合,一个字段是一系列词的集合,一个词是一系列字节的集合。

相同的字节序列在不同的字段中,也会被当作不同的词(term), 所以词应该用一个二元组来表示:字段名+字节内容。


字段field

一个字段是一个文档的一个部分,每个字段都有3个部分:字段名、字段类型和字段值。字段值可以是字符、字节或者是数字。

在Lucene中,字段可以是可存储(stored)类型的,这种情况下,字段的值是以字面上的不倒排的方式保存在索引中。

字段可以是倒排(indexed)类型的,这种情况下,字段的值会被倒排。

一个字段可以同时是stored和indexed类型。


段segments

Lucene中,一个完整的索引是包含多个子索引,或者叫段。每一个段都是一个完全独立的索引,可以独立地进行搜索。

索引的生成过程有两个基本步骤:

1、对添加的新文档生成新的段

2、合并已有的段

一个搜索过程可以跨越多个索引,每个索引可能包含一组段。


文档号

Lucene内部是一个整数文档号来标识文档。第一个添加的文档的文档号被标识为0,后面的依次按序增长。

文档号在以下场景是可变的:

1、文档号只在单个段里面是唯一的,当文档号用在更大的范围中时需要进行转换。最标准的做法是,为每一个段分配一个范围的值。需要

把一个段里面的文档号转换成一个外部值的时候,只需要加上这个段的基准值就行了。需要把一个外部值转换回段内值的时候,可以根据外

部值的大小判断出这个段所用文档号的范围,然后减去这个段的基准值。比如,两个各包含5个文档的段合并的时候,第一个段有一个基准

值0,第二个段有一个基准值5,那么,第二个段的3号文档转换成外部文档号的时候,就应该对应8。

2、当有文档被删除时,文档号之间就会出现缺失的现象。这些不用的文档号在合并段的过程中就会被删除掉。因此,一个新合并好的段的

文档号中间就不会出现断裂。


索引结构总览

每个段索引都会维护以下信息:

Segment_info. 包含了段的元数据信息,比如有多少文档、使用哪些文件

Field_names: 包含索引中字段名称的集合

Store_Field_values.对每一个文档,都包含了一个属性-值的列表,属性就是字段的名字。这些内容都是用来关于文档的辅助信息,比如文档的标题

URL,或者数据库的地址。这些可保存的字段在搜索命中的时候都会返回到结果中。信息以文档号标识

Term_dictionary.这是一个字典,里面包含了所有文档中indexed字段用到的所有的term.字典里面也包含term所对应的文档的编号和term频率/距离数据

的指针。

Term_Frequency_data.对于字典里的每一个term, 都保存了包含这个term的所有文档的编号,和文档中这个term出现的频率。IndexOptions.DOCS_ONLY

可以标识不保存term的频率数据。

Term_Proximity_data.对于字典里的每一个term,都保存了这个term在某个文档中出现的位置。如果所有文档的所有字段都不保存位置数据的话,这个数据也

不会存在。

Normalization_factors.对于每个文档的每一个字段,都会存储一个值,如果这个字段命中搜索的话,这个值就会被乘进得分中。

Term_Vectors.一个term vector包含了term的值和频率。

Per-document_values. 这个信息会被加载进内存以提高访问速度。这个信息对打分会很有用。

Deleted_documents.一个可选的文件,用来标识被删掉的文档。


文件命名

一个段索引中的所有文件,文件名都是一样的,只是扩展名不一样。扩展名表示不同的文件格式。当使用复合文件格式(Compound File format)的时候,段里面的

文件会被集成一个.cfs格式的文件。

通常,一个索引的所有段会放在同一个目录下,但这不是必须的。

文件名都按序增长的,比如第一个段文件叫segments_1,第二个就叫segments_2,依次类推。这个编号是一个36进制的长整型的数。


文件扩展名

NameExtensionBrief DescriptionSegments Filesegments.gen, segments_NStores information about a commit pointLock Filewrite.lockThe Write lock prevents multiple IndexWriters from writing to the samefile.Segment Info.siStores metadata about a segmentCompound File.cfs, .cfeAn optional "virtual" file consisting of all the other index files forsystems that frequently run out of file handles.Fields.fnmStores information about the fieldsField Index.fdxContains pointers to field dataField Data.fdtThe stored fields for documentsTerm Dictionary.timThe term dictionary, stores term infoTerm Index.tipThe index into the Term DictionaryFrequencies.docContains the list of docs which contain each term along with frequencyPositions.posStores position information about where a term occurs in the indexPayloads.payStores additional per-position metadata information such as character offsets and user payloadsNorms.nvd, .nvmEncodes length and boost factors for docs and fieldsPer-Document Values.dvd, .dvmEncodes additional scoring factors or other per-document information.Term Vector Index.tvxStores offset into the document data fileTerm Vector Documents.tvdContains information about each document that has term vectorsTerm Vector Fields.tvfThe field level info about term vectorsDeleted Documents.delInfo about what files are deleted

0 0