lucene索引文件格式-概览

Apache Lucene - 索引文件格式

介绍

本文档定义了此版本(4.10.4)Lucene中使用的索引文件格式,如果您使用的是不同版本的Lucene,请查阅和您使用的版本一起发布的docs文档。

Apache Lucene是用Java编写的,但是正在做一些努力来用其他编程语言中编写Lucene版本。如果这些版本要与Apache Lucene保持兼容,则需要一个与语言无关的Lucene索引格式定义。因此,本文档试图提供Apache Lucene文件格式的完整且独立的定义。

随着Lucene的发展,这份文件应该不断发展。Lucene在不同编程语言中的版本应努力就文件格式达成一致,并生成本文档的新版本。

定义

Lucene的基本概念是索引,文档(document),字段(field)和词(term)

索引包含一系列文档

  • 文档是一系列字段
  • 字段是命名的词序列
  • 词是一个字节序列

两个不同字段中的相同字节序列被认为是不同的词。因此,词表示为一对:命名字段的字符串和字段中的字节。

倒排索引

该索引存储有关词的统计信息,以使基于词的搜索更有效。Lucene的索引属于被称为倒排索引的索引家族。这是因为它可以列出包含它的文档,这是自然关系的反转,其中文档列出词。

字段类型

在Lucene中,字段可以被存储,在这种情况下,它们的文本以字面方式以非反转的方式存储在索引中。被反转的字段称为索引,一个字段既可以存储也可以被索引。

字段的文本可以被tokenized为要索引的词,或者字段的文本可以逐字地用作要索引的词。大多数字段都是标记化的,但有时某些标识符字段的字面索引很有用。

有关 Fields的更多信息,请参阅Field java文档。

Segments


Lucene索引可以由多个子索引或段组成。每个段都是完全独立的索引,可以单独搜索。索引演变为:
为新添加的文档创建新段
合并现有段

搜索可能涉及多个段和/或多个索引,每个索引可能由一组段组成。

文件编号

在内部,Lucene通过整数——文档编号引用文档。添加到索引的第一个文档编号为零,并且添加的每个后续文档都比前一个更大。

请注意,文档的编号可能会更改,因此在将这些编号存储在Lucene之外时应小心。特别是,在以下情况下,数字可能会发生变化:

  • 存储在每个段中的数字仅在段内是唯一的,并且必须先进行转换才能在更大的上下文中使用。标准技术是根据该段中使用的数字范围为每个段分配一系列值。要将文档编号从段转换为外部值,请添加段的基本文档编号。要将外部值转换回特定于段的值,将通过外部值所在的范围来标识该段,并减去该段的基值。例如,可以组合两个五个文档段,使得第一个段的基值为零,五个中的第二个段。来自第二段的文档3的外部值为8。

  • 删除文档时,会在编号中创建间隙。随着索引通过合并演变,这些最终会被删除。合并段时删除已删除的文档。因此,新合并的细分市场的编号没有差距

索引结构概述

每个段索引都保持以下内容:

  • Segment info:包含有关段的元数据,例如文档数,以及它使用的文件
  • Field names: 包含索引中使用的字段名称集合
  • Stored Field values: 对于每个文档,这包含属性 - 值对的列表,其中属性是字段名称。这些用于存储有关文档的辅助信息,例如其标题,URL或访问数据库的标识符。存储的字段集是搜索时为每个匹配返回的字段。这是由文件编号键入的
  • Term dictionary: 字典包含所有文档的所有索引字段中使用的所有词。字典还包含包含该词的文档数量,以及指向词频和邻近度数据的指针.
  • Term Frequency data: 对于字典中的每个词,包含该词的所有文档的编号以及该文档中词的频率,除非省略频率(IndexOptions.DOCS_ONLY)
  • Term Proximity data: 对于词典中的每个词,词在每个文档中出现的位置。请注意,如果所有文档中的所有字段都省略位置数据,则不存在此操作
  • Normalization factors: 对于每个文档中的每个字段,存储的该值乘以该字段上的匹配分数。
  • Term Vectors. 对于每个文档中的每个字段,可以存储词向量(有时称为文档向量)。词向量由词文本和词频率组成。要将词向量添加到索引,请参阅Field构造函数
  • Per-document values: 与存储的值一样,这些值也由文档编号键入,但通常用于加载到主存储器中以便快速访问。存储值通常用于搜索的摘要结果,而每个文档值对于评分因子等内容非常有用.
  • Deleted documents: 一个可选文件,表示哪些文档已经被删除

文件名

属于一个段的所有文件具有相同的名称和不同的扩展名。扩展名对应于下面描述的不同文件格式。使用复合文件格式(默认为1.4及更高版本)时,这些文件(段信息文件,锁文件和已删除文档文件除外)将折叠为单个.cfs文件(有关详细信息,请参阅下文)

通常,索引中的所有段都存储在单个目录中,但这不是必需的

从版本2.1(无锁提交)开始,文件名永远不会被重用(有一个例外,“segments.gen”,见下文)。也就是说,当任何文件保存到目录时,它将被赋予一个前所未有的文件名。这是使用简单的世代方法实现的。例如,第一段文件是segments_1,然后是segments_2等。生成是以字母数字(基础36)形式表示的顺序长整数。

文件扩展名摘要

下表总结了Lucene中文件的名称和扩展名:

名称 扩展名 简要描述 源码文件
Segments File segments.gen, segments_N 存储有关提交点的信息 SegmentInfos
Lock File write.lock 写锁定可防止多个IndexWriters写入同一文件.
Segment Info .si 存储有关段的元数据 Lucene40SegmentInfoFormat
Compound File .cfs, .cfe 一个可选的“虚拟”文件,由经常用完文件句柄的系统的所有其他索引文件组成. CompoundFileDirectory
Fields .fnm 存储有关字段的信息 Lucene40FieldInfosFormat
Field Index .fdx 包含指向字段数据的指针 Lucene40StoredFieldsFormat
Field Data .fdt 存储的文档字段 Lucene40StoredFieldsFormat
Term Dictionary .tim 词字典,存储词信息 Lucene40PostingsFormat
Term Index .tip 词字典的索引 Lucene40PostingsFormat
Frequencies .frq 包含每个词和频率的文档列表 Lucene40PostingsFormat
Positions .prx 存储词在索引中出现的位置信息 Lucene40PostingsFormat
Norms .nrm.cfs, .nrm.cfe 文档和字段的编码长度和提升因子 Lucene40NormsFormat
Per-Document Values .dv.cfs, .dv.cfe 编码其他评分因子或其他每个文档信息 Lucene40DocValuesFormat
Term Vector Index .tvx 存储文档数据文件中的偏移 Lucene40TermVectorsFormat
Term Vector Documents .tvd 每个文档包含的词向量的信息 Lucene40TermVectorsFormat
Term Vector Fields .tvf 关于术语向量的字段级信息 Lucene40TermVectorsFormat
Deleted Documents .del 删除的文件信息 Lucene40LiveDocsFormat

Lock File

写锁默认存储在索引目录中,名为“write.lock”。如果锁目录与索引目录不同,则写入锁将命名为“XXXX-write.lock”,其中XXXX是从索引目录的完整路径派生的唯一前缀。当此文件存在时,writer当前正在修改索引(添加或删除文档)。此锁定文件确保一次只有一个writer正在修改索引。

你可能感兴趣的:(lucene索引文件格式-概览)