`
wbj0110
  • 浏览: 1585458 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Lucene 源代码剖析-5 索引文件结构(4)

阅读更多
Lucene 源码剖析

 

 

 

 

3.3.6 Term向量文件

     
 

Term向量(vector)的支持是field基本组成中对一个field来说的可选项,它包含如下4种文件:


             1.
       文档索引或.tvx文件:对每个文档来说,它把偏移(offset)存储进文档数据(.tvd)文件和域field数据(.tvf)文件     
 

版本

包含的项

数目

类型

描述

全部版本

TVXVersion

1

Int

Lucene 2.4中为3 (TermVectorsReader.FORMAT_VERSION2)

DocumentPosition

NumDocs

UInt64

.tvd文件中的偏移

FieldPosition

NumDocs

UInt64

.tvf文件中的偏移

        
结构如下图所示:        
 

 

  

    

     

    2.       文档或.tvd文件:对每个文档来说,它包含fields的数目,有term向量的fields的列表,还有指向term向量域文件(.tvf)中的域信息的指针列表。该文件用于映射(map out)出那些存储了term向量的fields,以及这些field信息在.tvf文件中的位置。        
 

版本

包含的项

数目

类型

描述

全部版本

TVDVersion

1

Int

Lucene 2.4中为3 (TermVectorsReader.FORMAT_VERSION2)

NumFields

NumDocs

VInt

 

FieldNums

NumDocs

FieldNums

 

 

FieldNums->FieldNumDelta

NumFields

VInt

 

 

FieldPositions

NumDocs

FieldPositions

 

 

FieldPositions->FieldPositionDelta

NumField-1

VLong

 

        
结构如下图所示:        
 

 

         

    3.       field.tvf文件:对每个存储了term向量的field来说,该文件包含了一个term的列表,及它们的频率,还有可选的位置和偏移信息。       
  

版本

包含的项

数目

类型

描述

全部版本

TVFVersion

1

Int

Lucene 2.4中为3 (TermVectorsReader.FORMAT_VERSION2)

NumTerms

NumFields

VInt

 

Position/Offset

NumFields

Byte

 

TermFreqs

NumFields

TermFreqs

 

TermFreqs->TermText

NumTerms

TermText

 

TermText->PrefixLength

NumTerms

VInt

 

TermText->Suffix

NumTerms

String

 

TermFreqs->TermFreq

NumTerms

VInt

 

TermFreqs->Positions?

NumTerms

Positions

 

Positions->Position

TermFreq

VInt

 

TermFreqs->Offsets?

NumTerms

Offsets

 

Offsets->StartOffset

TermFreq

VInt

 

Offsets->EndOffset

TermFreq

VInt

 

        
结构如下图所示:        
 

 

         

备注:


 

l Positions/Offsets 字节存储的条件是当该term向量含有存储的位置或偏移信息时。
 l Term Text prefixes文本前缀是共享的,表示根据前一个term的文本来初始化的字符串前缀长度,前一个term必须已经预设成后缀文本以便构成该term的文本。比如,如果前一个term为“bone”,而当前term为“boy”,则该PrefixLength值为2suffix值为“y”。
 l Positions存储为Delta编码的VInts,意思是我们只能存储当前位置与最后位置的差值。
 l Offsets存储为Delta编码的VInts,第一个VIntstartOffset,第二个VIntendOffset    
         

3.3.7 删除的文档 (.del)

     
 

删除的文档(.del)文件是可选的,而且仅当一个segment存在有被删除的文档时才存在。即使对每一单个segment,它也是维护复合segment的外部数据(exterior)。  

     
 

Lucene 2.1及以前版本,它的格式为:Deletions (.del) –> ByteCount,BitCount,Bits   

     
 

2.2及以上版本,格式如下:  

     
 

版本

包含的项

数目

类型

描述

2.2之后版本

[Format]

1

UInt32

可选,-1表示为DGaps,非负数(negative)值表示为Bit,并且此时不存储Format

ByteCount

1

UInt32

代表Bit里的字节数目,而且一般值为(SegSize/8)+1

BitCount

1

UInt32

表示Bit里当前设置的字节数目

Bit|DGaps

1

 

Bit还是DGaps取决于FormatBits中对每一个索引的文档均包含一个字节,当一个bit对应的一个文档编号被设置时,表示该文档被删除。Bit从最低(least)到最重要(significant)的文档排序。所以Bits包含两个字节,0×000×02,则文档9被标记为删除。DGaps表示松散(sparse)的bit-vector向量比Bits更有效率(efficiently)。DGaps由索引中非0Bits位生成,以及非0的字节数据本身。Bits中非0字节数目(NonzeroBytesCoun)不会存储。

Bit->Byte

ByteCount

Byte

 

DGaps->DGap

NonzeroBytesCount

VInt

 

DGaps-> NonzeroBytes

NonzeroBytesCount

Byte

 

  

     
 

结构如下图所示:  

     
 

    

 

  

     
 

举例来说,如果有8000 bits,并且只有bits 10, 12, 32 被设置,DGaps将会存储如下数据:  

     
 

(VInt) 1 , (byte) 20 , (VInt) 3 , (Byte) 1  

     
 

3.3.8 局限性(Limitations)

  

     
 

有几个地方这些文件格式会让terms和文档的最大数目受限于32-bit的大小,大约最大40亿。这在今天不是一个问题,长远来看(in the long term)可能会成为个问题。因此它们应该替换为UInt64类型或者更好的类型,如VInt则没有大小限制。  

http://www.cnblogs.com/eaglet/archive/2009/02/16/1391502.html

分享到:
评论

相关推荐

    .NET lucene 源代码

    标题中的".NET Lucene 源代码"表明我们将探讨的是如何在.NET环境下利用Lucene进行搜索引擎的开发,并且会涉及到源代码层面的解析。描述中提到的“简单易用”,揭示了Lucene的核心特性之一,即它对开发者友好,易于...

    Lucene源代码剖析

    《Lucene源代码剖析》是一本深度探讨Java版本Lucene搜索引擎库的专业书籍。Lucene是Apache软件基金会的一个开源项目,广泛应用于全文检索和信息检索领域。本书旨在通过深入解析其源代码,帮助开发者理解Lucene的工作...

    luke源码--查看lucene索引文件

    源码目录(src)是Luke的核心部分,包含了所有Java源代码,这些代码负责解析、显示和解释Lucene索引。通过阅读和研究源码,我们可以了解到Luke如何读取索引段、字段和文档,以及如何展示这些信息。例如,Luke提供了...

    Lucene-2.3.1 源代码阅读学习

    《Lucene-2.3.1 源代码阅读学习》 Lucene是Apache软件基金会的一个开放源码项目,它是一个高性能、全文本搜索库,为开发者提供了在Java应用程序中实现全文检索功能的基础架构。本篇文章将深入探讨Lucene 2.3.1版本...

    lucene-5.3.1源代码

    - 通过阅读源代码,可以理解Lucene的内部工作原理,如如何构建索引、执行查询等。 - 分析器部分的源码有助于了解文本预处理过程,包括分词、去除停用词等。 - 探究查询解析器的实现,掌握如何将自然语言转化为...

    lucene.net源代码

    《深入剖析Lucene.NET:基于源代码的实例解析》 Lucene.NET,作为Apache Lucene的.NET版本,是一个高性能、全文检索库,为.NET开发者提供了强大的文本搜索功能。本实例将带您深入理解Lucene.NET的内部机制,通过源...

    luke 源代码(luke Lucene index 索引 源代码)

    《深入理解Luke:Lucene索引查看工具的源代码解析》 Luke,作为一个开源的Lucene索引浏览器,为开发者提供了直接查看和分析Lucene索引的能力。它不仅是一个强大的工具,也是学习Lucene索引机制的重要途径。通过阅读...

    lucene-core-2.9.2.jar

    Apache采用的是Apache License 2.0,这是一种宽松的开源许可,允许用户自由地使用、复制、修改、合并、发布、分发、再授权和/或销售软件,同时也允许用户以源代码或编译后的形式分发。了解许可条款对于遵循开源社区...

    lucene第一步---5.中文分词IKAnalyzer和高亮highlighter的使用

    Lucene是Apache软件基金会的一个开放源代码项目,它是一个全文搜索引擎库,提供了文本分析、索引和搜索的基本功能。 1. **Lucene简介** Lucene是一个高性能、全文本检索库,可集成到各种系统中,用于构建强大的...

    lucene索引查看程序及代码

    通过阅读和分析源代码,我们可以学习到如何操作Lucene索引,以及如何构建类似的工具。 总结而言,luke作为Lucene索引的可视化工具,极大地便利了开发者对索引的理解和调试。无论是初学者还是经验丰富的开发人员,都...

    Lucene 3.6.2 源代码

    这个源代码版本代表了Lucene 3.x系列的最后一个稳定版本,为开发者提供了深入理解Lucene内部机制的宝贵资源。下面将详细探讨Lucene 3.6.2中的关键知识点。 1. **分词器(Tokenizers)**: Lucene的核心功能之一是...

    Lucene-core-2.0.0

    1. **Lucene概述**: Lucene是Apache软件基金会的一个开放源代码项目,它是Java语言编写的信息检索库。它提供了高级的索引和搜索功能,支持分词、布尔运算、短语搜索、近似搜索等多种搜索模式。 2. **Lucene核心组件...

    Incubating-Apache-Lucene.Net-2.0-004-11Mar07.bin.zip

    由于描述中提到“已编译,不含源代码”,这意味着提供的文件是编译后的二进制版本,用户可以直接在.NET环境中使用,而无需自行编译源代码。 Lucene.Net的核心功能包括: 1. **全文检索**:Lucene.Net支持对文本...

    lucene-3.0.1库及源代码

    《深入理解Lucene 3.0.1:库与源代码解析》 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。这个“lucene-3.0.1”版本代表了Lucene在2009年的一个重要里程碑,它提供了强大的文本检索功能,被广泛...

    lucene-2.9.4-src.zip

    《Apache Lucene 2.9.4源代码解析》 Apache Lucene是一个开源全文搜索引擎库,由Java编写,被广泛应用于各种搜索应用中...无论是对搜索技术的探索,还是在实际项目中的应用,深入研究Lucene源代码都能带来极大的收益。

    Lucene.net-4.8.0 -new Bate.rar

    Lucene.Net提供了多种内置分析器,如标准分析器(StandardAnalyzer)、盘古分析器(PanguAnalyzer),也可自定义分析器以满足特定的语言或业务需求。 3. **文档(Document)**:文档是信息的基本单位,可以包含多个...

    lucene-4.2.1-src.tgz

    5. **文档存储**:`Directory`接口表示索引的存储位置,如文件系统或内存。`Document`对象用于存储文档内容,`Field`对象则定义了文档字段的特性,如是否被索引、是否被存储等。 6. **更新和删除**:`IndexWriter`...

    lucene2.0.0搜索引擎源代码

    《深入剖析Lucene 2.0.0搜索引擎源代码》 Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了一个高效、可扩展的信息检索库,允许开发者轻松地在他们的应用程序中添加全文搜索功能。本文将重点...

Global site tag (gtag.js) - Google Analytics