基于lucene的案例开发:索引文件结构

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/42836309

前面我们已经介绍了非结构数据的检索过程以及lucene的数学模型,这篇博客就主要介绍一下lucene索引的文件结构,下图是lucene生成的索引实例:

lucene索引结构是层次结构,主要有以下几个层次:

索引(Index)

在lucene中,一个索引是放在一个文件夹中的,上述实例中的所有文件就组成了lucene索引

段(Segment)

一个索引中可以有很多段,段与段之间是独立的,添加新的文档可能会生成新段,不同的段可以合并生成一个新段,上图中相同的前缀文件就属于同一个段(图中共有两个段  _0 和 _1),当段的个数达到一定数量,段与段直接会合并,生成新段;segments.gen和segment_2既是段的元数据文件,也保存了段的属性信息。

文档(Document)

文档是创建索引的基本单位,不同的文档保存在不同的段中,一个段可以包含所个文档,新添的文档保存在一个新生成的一个段中,随着段的合并,不同的段会合并成一个新段。

域(Field)

一个文档包含不同类型的信息,可以拆分开索引,比如小说信息可以有书名、作者名、更新时间、简介、更新时间等属性,这些都可以保存在不同的域中。

词(Term)

词是索引的最小单位,是经过词法分析和语言处理后的字符串,上篇博客中的N维空间向量,每一个维度都是一个词。

正向信息&反向信息

lucene的索引结构中,即保存了正向信息,也保存了反向信息。所谓的正向信息就是安层次保存了从索引一直到词的包含关系:索引-->段-->文档-->域-->词,即此索引包含了哪些段,每个段包含了哪些文档,每个文档包含了哪些域,每个域域又包含了那些词。

如上图中,包含正向信息的文件有:

segment_2 保存了此索引包含了多少段,每个段包含了多少篇文档;

xxx.fdx , xxx.fdt 保存了此段的所有文档,每篇文档包含了多少域,每个域保存了哪些信息;

xxx.fnm 保存了此段包含了多少域,每个域的名称以及索引方式;

xxx.tvx , xxx.tvd , xxx.tvf 保存了此段包含了多少文档,每篇文档包含了多少域,每个域包含了多少词,每个词的字符串、位置等信息。

(这里需要说声歉意,上图的索引文件截图是基于lucene4.3.1创建出来的,文件结构和之前的版本有了很大的改动,自己查找了很多资料都没有找到新的对应关系,所以这部分还是按照之前的文件结构来介绍的,最后后附录之前的索引文件结构)

所谓反向信息保存了词典的倒排表的映射:词-->文档,包含反向信息的文件有:

xxx.tis xxx.tii 保存了词典,即此段包含的所有的词按字典的顺序排序;

xxx.frd 保存了倒排表,也即是每个词的文档ID列表;

xxx.prx 保存了倒排表中的每个词在文档中的位置。

lock

上图中还有一个重要的write.lock文件,lucene中目前有write.lock和commit.lock两种,write.lock是在对索引文件进行修改的时候生成的,这个时候IndexWrite的操作或者IndexReader 删除Document或取消删除都会抛出异常;commit.lock是在segments文件被读取活合并的时候生成的,当IndexReader读取索引文件之前会获得commit.lock,当segments被读取完毕的时候会被释放。

lucene3.0的索引文件结构如下图:

注:关于lucene4.3.1创建的文件结构自己将会继续查找相关资料,希望可以早日找到相关说明;如谁了解该问题,还请给出相关介绍或链接。

ps: lucene的原理部分就到这里结束了,下篇博客就开始介绍一些案例中可能会用到的API。

时间: 2024-10-18 21:35:20

基于lucene的案例开发:索引文件结构的相关文章

基于lucene的案例开发:实时索引的检索

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44279753 http://www.llwjy.com/blogdetail/31bb705106379feaf6d31b58dd777be6.html 个人博客小站搭建成功,网址 www.llwjy.com,欢迎大家来吐槽~ 在前面的博客中,我们已经介绍了IndexSearcher中的检索方法,也介绍了如何基于lucene中的NRT*类去创建实时索引,在这篇博客中我们就重点介

基于lucene的案例开发:实时索引的修改

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44280311 http://www.llwjy.com/blogdetail/e42fa5c3097f4964fca0fdfe7cd7a9a2.html 个人的博客小站已经上线了,网址 www.llwjy.com,欢迎大家来吐槽~ 上一篇博客已经介绍了实时索引的检索功能,这个就相当于数据的的查询功能,我们都知道数据库的增删改查是最常用的四个功能,实时索引也是一样,他也有增删改查

基于lucene的案例开发:实时索引管理类IndexManager

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44015983 http://www.llwjy.com/blogd.php?id=5757ce8c007754704b563dd6a47ca1ca 个人的博客小站也搭建成功,网址:www.llwjy.com/blog.php ,欢迎大家来吐槽~ 在前一篇博客中,对实时索引的实现原理做了一些简单的介绍,这里就介绍下,如何利用Lucene来实现索引的管理(Lucene中已经实现了大

基于lucene的案例开发:创建索引

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/42872711 从这篇博客开始,不论是API介绍还是后面的案例开发,都是基于 lucene4.3.1 这个版本,Lucene4.3.1 下载请点击这里, Lucene其他版本下载请点击这里,Lucene4.3.1官方API文档请点击这里. 创建索引demo 在开始介绍之前,先看一个简单的索引创建demo程序: /** *@Description: 索引创建demo */ pack

基于lucene的案例开发:实现实时索引基本原理

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/43982653 http://www.llwjy.com/blogd.php?id=63d4c488a2cccb5851c0498d374951c9 个人的博客小站也搭建成功,网址:www.llwjy.com/blog.php ,欢迎大家来吐槽~ 基本原理 在前面的博客中也说过,程序初始话索引文件是十分消耗系统资源的,因此要想实现实时索引就不能实时的去修改索引文件.重新加载索引文

基于lucene的案例开发:案例初识

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/43192055 首先抱歉,这几天在准备案例的整体框架设计,所以更新就断了几天,还请原谅. 案例整体介绍 在我们开始正式的案例开发介绍之前,我们先看一下整体的案例demo介绍,明白案例是做什么的. 从上图中,我们可以看出,这个案例主要是通过爬虫程序去采集纵横小说上的资源,然后将资源存储到自己的数据库中,将数据库中的需要检索的数据通过lucene建立索引文件,最后通过web服务展示数

基于lucene的案例开发:查询语句创建PackQuery

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44656141 http://www.llwjy.com/blogdetail/162e5e70516d7ddfb6df8f77e6b13a2b.html 个人博客站已经上线了,网址 www.llwjy.com~欢迎各位吐槽 ------------------------------------------------------------------------------

基于lucene的案例开发:Query查询

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/42969443 在Lucene索引的搜索过程中,构建Query对象是一个十分重要的过程.对于Query的理解,可以把它想象成数据库SQL查询语句中的where条件(当然Query的功能要比sql强大很多),在这篇博客中,我们将重点介绍几种常用的Query子类:QueryParser. MultiFieldQueryParser.TermQuery .PrefixQuery. Ph

基于lucene的案例开发:IndexSearcher中检索方法

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/43052829 前面我们介绍了Analyzer和Query,这篇我们就开始该系列最后一个类IndexSearcher的搜索API介绍,Lucene中重点API不止这里介绍的这一点,还有IndexWriter.Field.Highlighter等,这些就不在这一部分做介绍了,如若案例中用到的话,再做简单介绍. 查看Lucene4.3.1中IndexSearcher的API请点击这里

基于lucene的案例开发:分词器介绍

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/42916755 在lucene创建索引的过程中,数据信息的处理是一个十分重要的过程,在这一过程中,主要的部分就是这一篇博客的主题:分词器.在下面简单的demo中,介绍了7中比较常见的分词技术,即:CJKAnalyzer.KeywordAnalyzer.SimpleAnalyzer.StopAnalyzer.WhitespaceAnalyzer.StandardAnalyzer.I