`
Rocky_rup
  • 浏览: 145336 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Lucene索引文件解析之“项”

阅读更多


接上文Lucene索引文件解析之

 

关于项(Term)

 

.tis文件里记录的是经过分析器(analyser)分析之后的字典。还是来看文件内容:

 

.tis 写道

FF FF FF FE  00 00 00 00 00 00 00 07 00 00 00 80 ?..........€
00 00 00 10 00 05 63 6F 64 65 72 00 01 00 00 00 ......coder.....
06 65 78 70 65 72 74 00 01 01 01 00 03 69 27 6D .expert......i'm
00 01 01 01 00 06 6C 75 63 65 6E 65 00 02 01 01 ......lucene....
00 03 6E 65 77 00 01 02 02 00 05 61 6C 6C 65 6E ..new......allen
01 01 01 01 00 05 72 6F 63 6B 79 01 01 01 01       ......rocky....

 

1.  FF FF FF FE tis文件的版本;

2.  00 00 00 00 00 00 00 07 字典中记录的项的个数;

3.  00 00 00 80 IndexInterval ,这个参数是配合tii文件一起,加快查询之用,之后会详细介绍

4.  00 00 00 10 SkipInterval 用于加速TermDocs.skipTo(int)的,之后会详细介绍


5.  剩下的部分就是一个个项的信息:

1.  00 前缀长度,特指当前和它之前的公用的前缀部分的长度;举个例子,有两个相邻的项分别是“bone”“boy”,那么“boy”“bone”公用的前缀是“bo”,则前缀长度就是2;若没有公用的,或者项是第一个,那么前缀长度也就是0;这样做的目的是为了节省存储空间;

2.  05 的文本长度;

3.  63 6F 64 65 72 的文本内容"coder";

4.  00 所属的序号;

5.  01 在文档中出现的次数;

6.  00 .frq文件中位置的偏移量,这个字节定位项所在文档的关键

7.  00 .prx文件中位置的偏移量;

8.  00 SkipData.frq文件中位置

9.  此后依此类推。

.tis文件的格式为<文件版本><项数量>< IndexInterval><SkipInterval>[<公用前缀长度><项文本长度><项文本内容><项所属域序号><文档中出现次数><frq中的偏移量><prx中的偏移量><SkipData在frq的位置>...]

 

.tii文件中记录了tis文件的索引,简而言之,在查询时是通过预载tii来加快对的检索。 

 

.tii 写道

 

FF FF FF FE 00 00 00 00  00 00 00 01 00 00 00 80   ?..........€

00 00 00 10 00 00 FF FF  FF FF 0F 00 00 00 14      ...........

 

 

tii和tis的非常类似,只是在项信息之后多了一个IndexDelta,也就上面的14,它表示在tis文件中第一个项信息的偏移量是20(十六进制的14的十进制是20)个字节。

 

上面FF FF  FF FF 0F 是很让人迷惑的,因为tii中第一个索引项是空的,相当于new Term("",""),它没有一个域与其匹配,Lucene默认用-1来填充,具体细节请参见TermInfosWriter类的源代码。

 

到现在可能对tis和tii的作用还是很模糊,解密的关键在于对IndexInterval的理解,下次我们将围绕它来展开讨论。

3
0
分享到:
评论
2 楼 lc_windson 2012-12-22  
楼主,关于这一块,我遇到了一个很困惑的问题,分析.tii文件的时候,发现第二个term的IndexDelta这个数据与实际term在.tis文件中的起始地址对不上,错位了一个单词,隐约觉得自己明白了点什么,但是还是没有透彻,想请教下楼主
1 楼 lemonweirui 2009-05-04  
期待博主后续的讲解。。

相关推荐

    Lucene读取索引文件

    阅读和解析Lucene索引文件通常需要借助于Lucene提供的API。首先,通过`Directory`接口打开索引目录,如`FSDirectory.open()`方法,指定索引文件所在的路径。然后,创建`IndexReader`实例,它提供了访问索引文档的...

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

    《深入理解Luke:洞察Lucene索引文件》 在信息技术领域,搜索引擎的高效运作离不开对数据的快速检索,而Lucene作为开源全文检索库,扮演了核心角色。在这个过程中,Luke工具提供了一种直观的方式,让我们能够查看和...

    lucene索引查看工具及源码

    4. **术语浏览器**:这是 Luke 最强大的功能之一,可以查看倒排索引中的所有术语及其频率,帮助理解搜索是如何工作的。 5. **文档分析器**:可以实时分析输入文本,展示 Lucene 如何对其进行分词和处理。 在深入...

    Lucene索引文件格式

    《Lucene索引文件格式详解》 Lucene,作为一款强大的全文搜索引擎库,其索引文件格式是实现高效搜索的关键。本文将深入解析Lucene 1.3版本的索引文件结构,帮助读者理解其内部运作机制。 首先,我们要理解Lucene...

    毕设 Lucene解析索引PDF文档的内容

    iTextPDFExtractor.java ------ ...--PDFBox创建PDF文件的Lucene索引 PDFBoxPathIndex.java ------- --PDFBox创建指定目录PDF文档索引 POIOfficeExtractor.java ----- -- POI处理Excel和Word文档代码

    Lucene索引和查询

    **Lucene索引和查询** Lucene是Apache软件基金会的开放源码全文搜索引擎库,它提供了文本检索的核心工具,使得开发者能够快速构建自己的搜索应用。本项目中的代码旨在展示如何利用Lucene对多个文件夹下的数据进行...

    Lucene 索引的简单使用

    以上就是关于“Lucene索引的简单使用”的详细介绍,包括其核心概念、创建和查询索引的步骤以及一些高级特性。希望对你理解和应用Lucene有所帮助。在实际开发中,可以根据需求选择合适的Analyzer,优化索引策略,以...

    Lucene对本地文件多目录创建索引

    - `lukeall-0.8.1.jar`:Luke是一个用于查看和分析Lucene索引的工具,可以帮助开发者调试和理解索引结构。 - `log4j-1.2.12.jar`:日志框架,用于记录程序运行时的信息。 - `commons-httpclient-3.1.jar`:可能是...

    lucene索引非txt文档笔记

    在以上代码中,`textFiles` 是包含待索引文件的 File 对象数组。`StandardAnalyzer` 是 Lucene 提供的分析器,用于分词和其他文本预处理。`IndexWriter` 用于向索引目录添加文档,并负责管理索引的更新和优化。 总...

    lucene 对 xml建立索引

    ### Lucene对XML文档建立索引的技术解析与实践 #### 一、引言 随着互联网技术的迅猛发展,非结构化数据(如XML文档)在企业和组织中的应用日益广泛。如何高效地处理这些非结构化的数据,特别是进行快速检索成为了一...

    经典的lucene实例代码及详细解析以及lucene结构流程介绍

    索引文件是Lucene索引的物理存储单元,词典是词项的集合,倒排索引是词项到文档的映射关系。 在Lucene中,索引文件是以目录形式存储的,每个索引文件对应一个文档集合。词典是Lucene索引的核心组件,它存储了所有的...

    深入 Lucene 索引机制深入 Lucene 索引机制

    在索引过程中,Lucene会对输入的文本进行分词,创建一个词项到文档位置的映射。当进行查询时,系统会快速定位到包含查询词的文档,而不是像关系型数据库那样遍历所有记录进行匹配。这种方式特别适合处理大规模数据和...

    lucene索引优化多线程多目录创建索引

    Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排索引是一种数据结构,它允许快速查找包含特定词项的所有文档。这种高效的数据结构是Lucene快速搜索的基础。 当我们面临大量数据需要索引时,单...

    基于Lucene索引的分析与实现

    搜索时,用户输入的查询会被转换成词项列表,然后Lucene会查找这些词项在索引中的对应信息,通过评分算法确定相关性,最终返回最相关的文档。 在实现过程中,需要关注的关键步骤包括: - 文档解析:将非结构化的...

    Lucene5写的全文搜索的demo,包括创建索引和搜索

    为了运行 Lucene 示例,首先需要在 Eclipse 中导入这些设置,创建一个 Java 项目,并将 Lucene 相关库(如 `libs` 目录中的 jar 文件)添加到项目的类路径中。 2. **创建索引** - 在 Lucene 中,创建索引是搜索的...

    Lucene3.0创建索引

    2. **设置目标索引目录**:定义存放生成索引文件的路径。 3. **初始化`IndexWriter`对象**:用于控制索引的创建或更新。 4. **遍历并添加文档**:逐个读取源目录中的文本文件,并将其添加到索引中。 5. **关闭`...

    luke--- lucene索引数据查看器

    2. **打开索引**:选择要查看的Lucene索引目录,Luke会自动加载并解析索引结构。 3. **浏览索引**:在界面左侧选择要查看的字段,右侧则会显示字段的详细信息。 4. **搜索测试**:在搜索框输入查询,点击“Execute...

    Lucene 索引图形化界面工具 LukeAll 3.5~4.0

    - `lukeall-4.0.0-ALPHA.jar`:这是 LukeAll 4.0.0-ALPHA 版本的可执行 JAR 文件,用于查看和操作基于 Lucene 4.0.0-ALPHA 创建的索引。 - `lukeall-3.5.0.jar`:对应于 Lucene 3.5.0 版本的 LukeAll,用于处理基于...

    lucene索引简单介绍

    `索引.ppt`这样的文件可能是对Lucene索引原理的详细讲解,可能包含了PPT演示,涵盖了上述概念并可能提供了实例代码和案例分析。 总之,Lucene是一个强大的全文检索工具,它的索引机制是实现高效搜索的关键。通过...

    lucene.net 索引文件图形界面管理器

    描述中的“lucene.net 索引文件图形界面管理器”可能是指 NLuke,这是一个基于 .NET 的 Lucene 索引浏览器。NLuke 提供了可视化的界面,用户可以查看索引的详细信息,包括字段、分词、文档记录等。此外,NLuke 还...

Global site tag (gtag.js) - Google Analytics