Lucene源码解析--Field data和Field index

bb
一:Lucene41StoredFieldsFormat:域存储文件格式。会生成两个文件,一个是.fdt文件是域的数据文件,另外一个是.fdx文件是域的索引文件。
数据文件结构:

bb
二:CompressingStoredFieldsIndexWriter:该类能够生成一个文件(.fdx),该文件采用高效的内存数据结构,能够被加载到内存当中。能够开始定位包含document的块。为了有一个紧凑的内存表示,每个block由1024个chunk组成。Index计算平均每个chunk的字节数。对于每个chunk来说仅存储其距开始位置的偏移量及chunk的大小。

由域数据文件格式我们知道,每篇文档包含的域的个数,每个存储域的值都是不一样的,因而域数据文件中segment size 篇文档,每篇文档占用的大小也是不一样的,那么如何在fdt 中辨别每一篇文档的起始地址和终止地址呢,如何能够更快的找到第n 篇文档的存储域的信息呢?就是要借助域索引文件。

域索引文件也总共有segment size 个项,每篇文档都有一个项,每一项都是一个long,大小固定,每一项都是对应的文档在fdt 文件中的起始地址的偏移量,这样
如果我们想找到第n 篇文档的存储域的信息,只要在fdx 中找到第n 项,然后按照取出的long 作为偏移量,就可以在fdt 文件中找到对应的存储域的信息


三:CompressionMode:压缩模型。定义应该花费多少的工作在解压缩上面。有FAST,HIGH_COMPRESSION,FAST_DECOMPRESSION几种模型。

四:StoredFieldVisitor:提供一个低级别的方式访问index中的域值。其实现类在同一个reader中不要尝试去加载或访问另外一个存储文档。

五:DocumentStoredFieldVisitor:StoredFieldVisitor的实现类,用于加载文档中的所有存贮域或者加载指定名称的域。通常被IndexReader的document(int)方法用来加载一个document.

六:StoredFieldsWriter:用于存储field.对于每个document来说,首先调用startDocument(int)来确定将有多少field写入文档,然后调用wirteField(FieldInfo,IndexableField)往document中写field. 写完之后调用finish(FieldInfos,int)方法来进行验证和检查。最后调用close()方法来关闭writer.



fj.pngtest.jpg

fj.pngdoc.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-766485/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28624388/viewspace-766485/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值