Lucene使用文件扩展名标识不同的索引文件。如.fnm文件存储域Fields名称及其属性,.fdt存储文档各项域数据,.fdx存储文档在fdt中的偏移位置即其索引文件,.frq存储文档中term位置数
据,.tii文件存储term字典,.tis文件存储term频率数据,.prx存储term接近度数据,.nrm存储调节因子数据,另外
segments_X文件存储当前最新索引片段的信息,其中X为其最新修改版本,segments.gen存储当前版本即X值。
本系列文章将详细介绍的这些文件的数据存储细节。下面的图描述了一个典型的lucene索引文件列表:
它们的关系图则如下所示:
其中,
Segments是一个比较特殊的结构:
- 一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。
- 如上图,具有相同前缀文件的属同一个段,图中共两个段 "_0" 和 "_1"。
- segments.gen和segments_5是段的元数据文件,也即它们保存了段的属性信息
《索引文件格式》专题用例
在后面详细介绍每个索引文件的时候,都会使用一个例子中的数据进行分析。而这个例子就是《索引创建(5):索引数据池及内存数据细节
》中在内存中所建立好的那个倒排索引的例子。这里再次详细说明一下,后面将不再对这个例子做出说明:
(1)待索引文件集合一共四篇文档,分别是
文档名
|
文档路径 |
文档内容 |
lucene 1 |
E:\实验\content\lucene 1.txt |
lucene lucene lucene lucene lucene term .
|
lucene 2 |
E:\实验\content\lucene 2.txt |
lucene lucene lucene lucene lucene term term. |
lucene 3 |
E:\实验\content\lucene 3.txt |
term term term lucene lucene lucene lucene lucene. |
lucene 4 |
E:\实验\content\lucene 4.txt |
term |
(2)内存源数据组织形式(Document/Fields) 参见《索引创建(1):IndexWriter索引器
》中的索引创建代码:
-
for
(每个文本文件) {
-
-
Document doc = new
Document();
-
-
String fileName=file.getName().substring(0
,file.getName().indexOf(
"."
));
-
doc.add(new
Field(
"name"
,fileName, Field.Store.YES, Field.Index.NOT_ANALYZED));
-
-
String filePath=file.getPath();
-
doc.add(new
Field(
"path"
, filePath, Field.Store.YES, Field.Index.NOT_ANALYZED));
-
-
doc.add(new
Field(
"content"
,
new
FileReader(file)));
-
-
standardWriter.addDocument(doc);
-
}
for (每个文本文件) {
//Lucene的文档结构
Document doc = new Document();
//文件名称,可查询,不分词
String fileName=file.getName().substring(0,file.getName().indexOf("."));
doc.add(new Field("name",fileName, Field.Store.YES, Field.Index.NOT_ANALYZED));
//文件路径,可查询,不分词
String filePath=file.getPath();
doc.add(new Field("path", filePath, Field.Store.YES, Field.Index.NOT_ANALYZED));
//文件内容,需要检索
doc.add(new Field("content", new FileReader(file)));
//使用索引器对Document文档建索引
standardWriter.addDocument(doc);
}
这样,其数据源在Lucene的内存结构Document, Field表示如下:
真实文档名
|
Document对象 |
lucene 1 |
doc1 |
lucene 2 |
doc2 |
lucene 3 |
doc3 |
lucene 4 |
doc4 |
每个document包含的Field信息如下(以doc1举例):
域 |
域名 |
域数据值 |
是否被索引
(Indexed)
|
是否被存储
(Stored)
|
Field1 |
"name" |
"lucene 1"
|
Y |
N |
Field2 |
"path" |
"E:\实验\content\lucene 1.txt"
|
Y |
N |
Field3 |
"content" |
lucene lucene lucene lucene lucene term . |
Y |
N |
(3)内存索引表的结构如:《索引创建
(5):索引数据池及内存数据细节
》中所述。
分享到:
相关推荐
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
Lucene3.0之查询处理(1):原理和查询类型 各种Query对象详解
Lucene3.0创建索引 读取目录下的所有txt文档格式的文件,然后生成一个索引文件到某目录下!
lucene3.0庖丁+索引搜索程序,里面有代码示例
Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 ...
Lucene3.0特性Lucene3.0特性
lucene 3.0 API中文帮助,学习的人懂得的
Lucene学习总结之三:Lucene的索引文件格式(2) Lucene学习总结之三:Lucene的索引文件格式(3) Lucene学习总结之四:Lucene索引过程分析(1) Lucene学习总结之四:Lucene索引过程分析(2) Lucene学习总结之四...
lucene3.0的核心jar包文件,lucene3.0的核心jar包文件,lucene3.0的核心jar包文件,lucene3.0的核心jar包文件。
其中总体架构和索引文件格式是Lucene 2.9的,索引过程分析是Lucene 3.0的。 鉴于索引文件格式没有太大变化,因而原文没有更新,原理和架构的文章中引用了前辈的一些图,可能属于早期的Lucene,但不影响对原理和架构...
lucene3.0 实例,在jdk1.5,lucene3.0下调式通过,可以直接运行。先运行生成索引文件的class,在运行搜索的class。
lucene3.0 中文分词器, 庖丁解牛
Lucene3.0做的文件搜索,支持多种文件格式
Lucene 3.0 原理与代码分析完整版
传智播客Lucene3.0课程,Lucene3.0的入门教程.
lucene升级了,分词也得升级哦! 在使用lucene3与paoding集成的时候可能会出现以下错误: Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z ...
lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的
Lucene 3.0 原理 Lucene 3.0 原理 Lucene 3.0 原理 Lucene 3.0 原理
全面好用的lucene 2.0 api以及lucene 3.0 api帮助文档
Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析