Lucene系列-索引文件
本文介绍下lucene生成的索引有哪些文件组成,每个文件包含了什么信息。基于Lucene 4.10.0。
数据结构
索引(index)包含了存储的文档(document)正排、倒排信息,用于文本搜索。索引又分为多个段(segments),每个新添加的doc都会存到一个新segment中,不同的segments又会合并成一个segment。segment存储着具体的documents,每个doc有一系列的字段(field)组成,一个field的值是多个词(term),一个term是以一些bytes。其递进关系如下: 
index -> segments -> documents -> fields -> terms
文件介绍
全局性文件
segments_N: 记录索引的段数、各段名、各段中文档数、删除数和更新数。可能有多个segments_N文件,最大N的segments_N是有效文件。 
segments.gen: 记录当前index的代数(generation),即segments_N的最大N 
write.log:阻止多个IndexWriter同时修改索引,一次只能有一个IndexWriter
段文件
- 段描述 
xxx.si: 段的元数据,如此段的文档数及相关文件
xxx.del:删除的doc - field信息 
xxx.fnm:field names,field名称、索引方式
xxx.fdx:field index,索引xxx.fdt
xxx.fdt:field data,存储stored fields - term信息 
xxx.tip:term index,xxx.tim的索引,实现对xxx.tim的随机存取
xxx.tim:term dictionary,按字典顺序排列的terms,其值指向.doc/.pos
xxx.doc:倒排列表,term所在的docs、在doc中的频率
xxx.pos:倒排列表,term在doc中的位置
xxx.pay:payloads and offsets,term在doc中的offset
注意:term的位置及频率都是在某doc下term在field中的位置和偏移,位置以切词为单位,偏移以字符为单位 - term vector 
term vector用于打分,存储StoreTermVectors的field
xxx.tvx:term vector index,每个doc在xx.tvd、xx.tvf中的位置
xxx.tvd:term vector data file,每个doc的term vector field信息在xxx.tvf中的位置
xxx.tvf:term vector fields,field的term列表及各term的频率、位置或者偏移 - 归一化 
lucene为doc算分时根据各doc中的term weight(term对doc的重要性),但是不同的doc重要性不同、不同的field重要性不同、不同的文档长度也不同,要想让不同文档的term weight之间有可比性(打分有可比性)需要进行归一化。用于归一化的因子(normalization factors),如doc和field的boost factor及长度,存在如下文件中。
xxx.nvm:norms metadata
xxx.nvd:norms data - doc values 
存储DocValues类型的field,通过field value可以获取对应的doc number列表, 便于进行一些概括或者打分。类型为docvalue的field在doc不能重名。
xxx.dvm:DocValues metadata
xxx.dvd:DocValues data 
总结
从上节可以看出正排信息存储在:段(segments_N) -> field (.fnm/.fdx/.fdt) -> term (./tvx/.tvd/.tvf) 
倒排信息存储在:词典(.tim) ->倒排表(.doc/.pos) 
 
参考见: 
https://lucene.apache.org/core/4_10_0/core/org/apache/lucene/codecs/lucene410/package-summary.html#package_description 
https://lucene.apache.org/core/3_0_3/fileformats.html 
http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html
Lucene系列-索引文件的更多相关文章
- Solr4.8.0源码分析(12)之Lucene的索引文件(5)
		
Solr4.8.0源码分析(12)之Lucene的索引文件(5) 1. 存储域数据文件(.fdt和.fdx) Solr4.8.0里面使用的fdt和fdx的格式是lucene4.1的.为了提升压缩比,S ...
 - Solr4.8.0源码分析(11)之Lucene的索引文件(4)
		
Solr4.8.0源码分析(11)之Lucene的索引文件(4) 1. .dvd和.dvm文件 .dvm是存放了DocValue域的元数据,比如DocValue偏移量. .dvd则存放了DocValu ...
 - Solr4.8.0源码分析(10)之Lucene的索引文件(3)
		
Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这 ...
 - Solr4.8.0源码分析(9)之Lucene的索引文件(2)
		
Solr4.8.0源码分析(9)之Lucene的索引文件(2) 一. Segments_N文件 一个索引对应一个目录,索引文件都存放在目录里面.Solr的索引文件存放在Solr/Home下的core/ ...
 - Solr4.8.0源码分析(8)之Lucene的索引文件(1)
		
Solr4.8.0源码分析(8)之Lucene的索引文件(1) 题记:最近有幸看到觉先大神的Lucene的博客,感觉自己之前学习的以及工作的太为肤浅,所以决定先跟随觉先大神的博客学习下Lucene的原 ...
 - lucene大索引文件分布式存储方案
		
这几天实现了个Lucene分布式检索的模块,采用的分布式方案是将数据分块,分别生成N个索引文件,放到N个节点上运行.检索时,对每一个节点发出查询请求,将N个节点返回的结果归并,然后生成一个新的结果.如 ...
 - Lucene实现索引和查询
		
0引言 随着万维网的发展和大数据时代的到来,每天都有大量的数字化信息在生产.存储.传递和转化,如何从大量的信息中以一定的方式找到满足自己需求的信息,使之有序化并加以利用成为一大难题.全文检索技术是现如 ...
 - Lucene的索引不跨平台
		
在windows上使用Lucene生成索引文件,将索引文件复制到Linux服务器上,报错"校验错误,可能是硬件问题". 所以,Lucene的跨平台只是代码跨平台,生成的索引不跨平台 ...
 - Lucene索引文件学习
		
最近在做搜索,抽空看一下lucene,资料挺多的,不过大部分都是3.x了--在对着官方文档大概看一下. 优化后的lucene索引文件(4.9.0) 一.段文件 1.段文件:segments_5p和s ...
 
随机推荐
- Xamarin For Android  遇到错误java.exe exited with code 1. (msb6006)
			
今天用Xamarin编译一个android工程遇到这样一个问题:java.exe exited with code 1. (msb6006),项目代码没有问题.于是各种谷歌 ,在http://foru ...
 - 选择HttpHandler还是HttpModule?
			
阅读目录 开始 理解ASP.NET管线 理解HttpApplication 理解HttpHandler 理解HttpModule 三大对象的总结 案例演示 如何选择? 最近收到几个疑问:HttpHan ...
 - C#引用类型(class)和值类型(struct)
			
1. 值参数 当利用值向方法传递参数时,编译程序给实参的值做一份拷贝,并且将此拷贝传递给该方法.被调用的方法不传内存中实参的值,所以使用值参数时,可以保证实际值是安全的. using System; ...
 - [转]LibreOffice-SDK 开发实战:嵌入MFC-View 和 C# Winform
			
转自:http://www.aqcoder.com/blog/detail/id/1579bb39-9bcd-4c0f-9b02-67a851148196/ 前面片文章中我简要介绍了下 LibreOf ...
 - Android Sqlite 工具类封装
			
鉴于经常使用 Sqlite 数据库做数据持久化处理,进行了一点封装,方便使用. 该封装类主要支持一下功能 支持多用户数据储存 支持 Sqlite数据库升级 支持传入 Sql 语句建表 支持 SQLit ...
 - (转)Java中的static关键字解析
			
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
 - PowerPoint
			
工具/原料 PowerPoint 2007 百度经验:jingyan.baidu.com 一.PowerPoint2007基础知识 1 桌面快捷方式:也可以“开始”菜单→程序→Microsoft Of ...
 - JQuery FullCalendar(一)
			
FullCalendar官网:http://arshaw.com/fullcalendar FullCalendar中文API:http://blog.sina.com.cn/s/blog_9475b ...
 - <Oracle Database>数据字典
			
数据字典 数据字典是由Oracle服务器创建和维护的一组只读的系统表,它存放了有关数据库和数据库对象的信息,Oracle服务器依赖这些信息来管理和维护Oracle数据库. 数据字典分为两大类:一种是基 ...
 - Android 下进行单元测试 Test run failed:Instrumentation run failed due to 'java.lang.ClassNotFoundException'
			
废话不说,一直报错.网上介绍的都是缺少如下声明之类. 但注意的是工程配置是导出junit包, 路径为 project上右键 --> properties -> java build pa ...