lucene以.gen ,.si为后缀名的文件。

介绍了Lucene里面所有的文件格式以及的作用,那么接下来的一系列文章里,将逐个细说,今天我们先来看下lucene索引文件格式里面的老大段文件,以.gen ,.si为后缀名的文件。


.si是记录段文件的元数据的信息,主要有如下的几个属性

数据类型 描述
Header 记录一个头部编码,包含一个字符串去校验文件和版本号,它可以被解析和验证通过一个特定的方法,CodecHeader --> Magic,CodecName,Version Magic ->Uint32(32位无符号整数写成四个字节,高位字节),标识开始的头部CodecName->String 通过这个字符串校验文件Version ->Uint32(32位无符号整数写成四个字节,高位字节),记录文件的版本号
SegSize Int32
SegVersion String
Diagnostics, Attributes Map<String,String>
Files Set<String>
IsCompoundFile Int8




1,SegVersion段的版本号,是段文件创建时的编码版本。
2,SegSize是指包含在这个段文件里文档数(Document)的总数
3,IsCompoundFile记录着这个段在写入时,是否被作为一个复合索引文件,
如果是-1的话,则为正常的段索引文件,为1的话就是复合索引文件
4,Checksum,检验和,包含所有段文件中的所有字节的CRC32 checksum,
通常用于验证索引文件的完整性。
5,Diagnostics,诊断映射,它会私下被IndexWriter写入记录,作为一个Debug时的一个辅助工具,每个段文件都有一个对应的诊断映射,它包含一些元数据,包括一些lucene当前的版本号,操作系统,Java版本,以及它是怎么被创建的,是合并(merge),还是被刷新(flush),还是被多个索引合并(addindex)
6,Attributes,codec-private属性的键-值映射。
7,对于这个段来说,它被组成由多个文件


SegmentInfos这个类,几乎涵盖了段文件里所有的详细信息,提供了大量的方法用于在文件系统上操作段文件,segments_N往往是最活跃的文件,因为最新的段文件,常常面临着频繁的添加操作,这个文件包含了每个段的名字和细节编解码器和一些删除的元数据信息。

另外一个文件segments.gen,这个文件包含了以_N开头的在当前的段文件的记录,
这个文件仅仅作为一个备份,以防Directy不能准确的定位所写入的当前段文件是那一些以_N开头的,通常仅包含一个int32位的header信息。



文件:
segments.gen: GenHeader, Generation, Generation
segments_N: Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, UpdatesFiles>SegCount, CommitUserData, Checksum

数据类型:

Header---->CodecHeader
GenHeader, NameCounter, SegCount, DeletionCount --> Int32
Generation, Version, DelGen, Checksum, FieldInfosGen --> Int64
SegName, SegCodec --> String
CommitUserData --> Map<String,String>
UpdatesFiles --> Set<String>


介绍:
Version数量,记录着这个索引所有被添加或删除文档的个数。
NameCounter ,通常用于生成新的段文件名称
SegName ,段名称,通常被用于所有组成段文件的前缀名称
DelGen ,记录着所有段删除文件的数量,如果这个数是-1,则意味
着没有删除任何记录,除此之外,任何一个大于0的数字,则意味着
索引已经通过LiveDocsFormat进行了删除存储
DeletionCount,记录某一个段删除文档的数量
Checksum,校验和,上文有描述
SegCodec,是段文件的编码和解码后的名称
CommitUserData,用来提交一个用户提供不透明的Map结构的数据
FieldInfosGen ,域信息文件,记录段更新的次数,-1无更新,大于0的数字
则代表这更新的次数。
UpdatesFiles,存储在段过被更新过的文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Delphi 2010 中调用 Lucene.Net.dll 函数可以使用 .NET 桥接技术来实现。具体步骤如下: 1. 在 Delphi 中创建一个 .NET 桥接单元,用于连接 Lucene.Net.dll。可以使用 Delphi 的 .NET 桥接工具来自动生成这个单元。在 Delphi IDE 中,选择“File”->“New”->“.NET Assembly”,然后选择 Lucene.Net.dll 文件,生成一个 .NET 桥接单元。 2. 在 Delphi 2010 中创建一个新项目,并将刚才生成的 .NET 桥接单元添加到项目中。 3. 在 Delphi 中编写代码调用 Lucene.Net.dll 中的函数。可以使用 Delphi 的 .NET 桥接技术直接访问 Lucene.Net.dll 中的类型和方法。 以下是一个简单的示例代码,演示如何使用 Delphi 2010 调用 Lucene.Net.dll 中的函数: ```delphi unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Lucene.Net.Store, Lucene.Net.Analysis.Standard, Lucene.Net.Documents, Lucene.Net.Index; {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); var dir: FSDirectory; analyzer: StandardAnalyzer; writer: IndexWriter; doc: Document; begin dir := TDirectory.GetDirectory('c:\index'); analyzer := TStandardAnalyzer.Create; writer := TIndexWriter.Create(dir, analyzer, True); doc := TDocument.Create; doc.Add(TField.Create('title', 'Delphi', TField.TERM_VECTOR_YES)); doc.Add(TField.Create('body', 'Lucene.Net.dll', TField.TERM_VECTOR_YES)); writer.AddDocument(doc); writer.Commit; writer.Close; analyzer.Close; dir.Close; Memo1.Lines.Add('Document added to index'); end; end. ``` 在这个示例中,我们使用 Delphi 2010 调用 Lucene.Net.dll 中的 IndexWriter 类来将一个文档添加到索引中。我们还使用 Lucene.Net.dll 中的 FSDirectory 和 StandardAnalyzer 类来创建索引目录和分析器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值