Lucene索引文件学习

?最近在做搜索,抽空看一下lucene,资料挺多的,不过大部分都是3.x了……在对着官方文档大概看一下。

优化后的lucene索引文件(4.9.0)

一、段文件

1.段文件:segments_5p和segments.gen。

segments.gen保存当前段文件版本信息。

  • segments.gen: GenHeader, Generation, Generation, Footer

segments_N(segments_5p)保存最新的段的信息,包括段的个数,每个段的段名、文档数等信息。

  • segments_N: Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, DocValuesGen, UpdatesFiles>SegCount, CommitUserData, Footer

? 源码参考:SegmentInfos.read(Directory directory, String segmentFileName):

2.段信息:*.si,存储段的基本信息。

  • .si: Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Attributes, Files

? ? ? ?只对4.0-4.5使用,新版已经抛弃了,可以无视。??

二、域文件

1.域(field):*.fnm ,存储域的信息。

  • FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,DocValuesGen,Attributes>?FieldsCount,Footer

? 源码参考:org.apache.lucene.codecs.lucene46.Lucene46FieldInfosFormat

2.域(field)索引:*.fdx,存储到域数据的指针。

  • FieldsIndex (.fdx) --> <Header>, <ChunkIndex>

?? 源码参考:org.apache.lucene.codecs.lucene41.Lucene41StoredFieldsFormat

3.域(field)数据:*.fdt,存储文档的域,话说这个结构比较复杂,简单列一下。

  • FieldData (.fdt) --> <Header>, PackedIntsVersion, <Chunk>ChunkCount
  • ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment
  • Chunk --> DocBase, ChunkDocs, DocFieldCounts, DocLengths, <CompressedDocs>

? 源码参考:org.apache.lucene.codecs.lucene41.Lucene41StoredFieldsFormat

三、字典文件

4.项(term)字典:*.tim,存储项的信息。

  • TermsDict (.tim) --> Header,?PostingsHeader, NodeBlockNumBlocks, FieldSummary, DirOffset, Footer

? 源码参考:org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat

5.项(term)索引:*.tip,到项字典的索引。

  • TermsIndex (.tip) --> Header, FSTIndexNumFields?<IndexStartFP>NumFields, DirOffset, Footer

? 源码参考:org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat?

四、其他文件?

6.频率:*.doc,包括一个文档列表,列表中每一个项都有一个频数。

  • docFile(.doc) --> Header, <TermFreqs, SkipData?>TermCount, Footer

? 源码参考:org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat?

7.位置:*.pos,存储项在索引中出现的位置信息。

  • PosFile(.pos) --> Header, <TermPositions>?TermCount, Footer

? 源码参考:org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat

?8.norm文件:*.nvd,*.nvm,编码文档和域的长度已经boost factors。

  • Norms data (.nvd) --> Header,<Uncompressed | TableCompressed | DeltaCompressed>NumFields,Footer

? 源码参考:org.apache.lucene.codecs.lucene49.Lucene49NormsFormat

?除此之外,还可能有一些其他文件,暂且不表。

?参考:

http://lucene.apache.org/core/4_9_0/core/org/apache/lucene/codecs/lucene49/package-summary.html#File_Naming

http://www.cnblogs.com/forfuture1978/category/300665.html

?

时间: 2024-12-12 22:15:42

Lucene索引文件学习的相关文章

Solr4.8.0源码分析(8)之Lucene的索引文件(1)

Solr4.8.0源码分析(8)之Lucene的索引文件(1) 题记:最近有幸看到觉先大神的Lucene的博客,感觉自己之前学习的以及工作的太为肤浅,所以决定先跟随觉先大神的博客学习下Lucene的原理.由于觉先大神主要介绍的是Lucene3.X系的,那我就根据源码以及结合觉先大神的来学习下4.X系的.内容可能会有些变化,且加入下我个人的理解. http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html 一. 基本类型

Lucene.net入门学习(结合盘古分词)

Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的 查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中 实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎. Lucene.net简介 Lucene.net是Lucene的.net移植版本,是一个

Luke 5—— 可视化 Lucene 索引查看工具,可以查看ES的索引

Luke 5 发布,可视化 Lucene 索引查看工具  oschina 发布于2015年08月31日 这是一个主要版本,该版本支持 Lucene 5.2.0. 它支持 elasticsearch 1.6.0(Lucene的4.10.4) 已解决的问题:#20增加支持重建索引并不会存储领域,不暴露位置的字段值. Pull Requests:#23 Elasticsearch 支持和阴影插件组装#26 添加 .gitignore 文件#27 支持 Lucene 5#28 luke.sh 新增LUK

Solr4.8.0源码分析(10)之Lucene的索引文件(3)

Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这两个文件.由于本文介绍的Solr4.8.0,所以对应的是SegmentInfoFormat的子类Lucene46SegmentInfoFormat. 首先来看下.si文件的格式 头部(header) 版本(SegVersion) doc个数(SegSize) 是否符合文档格式(IsCompoundF

Solr4.8.0源码分析(12)之Lucene的索引文件(5)

Solr4.8.0源码分析(12)之Lucene的索引文件(5) 1. 存储域数据文件(.fdt和.fdx) Solr4.8.0里面使用的fdt和fdx的格式是lucene4.1的.为了提升压缩比,StoredFieldsFormat以16KB为单位对文档进行压缩,使用的压缩算法是LZ4,由于它更着眼于速度而不是压缩比,所以它能快速压缩以及解压. 1.1 存储域数据文件(.fdt) 真正保存存储域(stored field)信息的是fdt文件,该文件存放了压缩后的文档,按16kb或者更大的模块大

Solr4.8.0源码分析(11)之Lucene的索引文件(4)

Solr4.8.0源码分析(11)之Lucene的索引文件(4) 1. .dvd和.dvm文件 .dvm是存放了DocValue域的元数据,比如DocValue偏移量. .dvd则存放了DocValue的数据. 在Solr4.8.0中,dvd以及dvm用到的Lucene编码格式是Lucene45DocValuesFormat.跟之前的文件格式类似,它分别包含Lucene45DocValuesProducer 和Lucene45DocValuesConsumer来实现该文件的读和写. 1 @Ove

使用Lucene的IndexReader读取索引文件的信息

/*前面学习了创建索引的方法是IndexWriter,这里所使用的是读取所创建的 * 索引的方法IndexReader. * 和他的子类 * MultiReader * */ package indexReader; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import o

一步一步跟我学习lucene(6)---lucene索引优化之多线程创建索引

这两天工作有点忙,博客更新不及时,请大家见谅: 前面了解到lucene在索引创建的时候一个IndexWriter获取到一个读写锁,这样势在lucene创建大数据量的索引的时候,执行效率低下的问题: 查看前面文档一步一步跟我学习lucene(5)---lucene的索引构建原理可以看出,lucene索引的建立,跟以下几点关联很大: 磁盘空间大小,这个直接影响索引的建立,甚至会造成索引写入提示完成,但是没有同步的问题: 索引合并策略的选择,这个类似于sql里边的批量操作,批量操作的数量过多直接影响执

Solr4.8.0源码分析(9)之Lucene的索引文件(2)

Solr4.8.0源码分析(9)之Lucene的索引文件(2) 一. Segments_N文件 一个索引对应一个目录,索引文件都存放在目录里面.Solr的索引文件存放在Solr/Home下的core/data/index目录中,一个core对应一个索引. Segments_N例举了索引所有有效的segments信息以及删除的具体信息,一个索引可以有多个Segments_N,但是有效的往往总是N最大的那个,为什么会出现多个segments_N,主要是由于暂时无法删除它们或者有indexwriter