lucene索引文件格式
学习lucene索引文件格式的目的是通过对lucene数据结构的理解,从而为lucene索引实现打下基础。
索引文件的整体结构
如下图,这是整个索引文件的整体结构,可以看到,实际上lucene索引保存下了相当多的东西
但是,单从上面的文件罗列,很难看出来一个整体的结构,那么,接下来这张图就向我们展示这个结构,原图来源于网络,但是由于已经过时,我根据lucene最新的版本重新画了一张。如果相对比3.0版就会发现,一些文件后缀也被改变了,比如tis,tii变成新的tim,tip,另外,实际上del文件也没有使用了,究其原因是writer会动态计算被删除的文件,而不是写入文件。
索引文件中最重要的结构便是倒排索引了,如下图,其中Dictionary就是所有term的集合,放在tim和tip中,而posting list则存放文档id,词频和单词出现的位置,放在pos和doc中,其中doc存放的是词频,pos存放的是单词位置。
编解码器
索引的文件格式有可能会进化,一旦版本更新之后就不能再支持其他的索引文件格式,或者说一个lucene版本只能支持lucene自己的索引势必会降低lucene的灵活性,那么如何保持索引文件格式的灵活性和动态扩展性也是一个值得考虑的问题,lucene采用编解码器(codec)来实现这种灵活性。
编解码器是lucene中负责与索引文件直接读写的模块。所有的上层调用都基于编解码器,这是代码模块化的结果。我们来看编解码器的一些设计思想。
首先是LuceneXXCodec,这是Codec的直接实现者,不同的版本可能会实现不同的codec,例如,lucene4.5就是Lucene45Codec。codec的实现采用了facade模式,屏蔽了后面的所有format
因为不同的版本可能会有不同的格式,所以对应将这些格式抽象出来对于可扩展性就尤为重要了。也正是因为如此,lucene前面的版本和后面的版本格式可能差别会很大。对于我们了解lucene文件格式可能并不太好。但是lucene索引中许多精髓都类似,因而他们还是相通的,理解一种格式便于我们了解另一种。
在lucene4系列中,4.0的实现是所有格式中最全的,其他新版本可能或多或少依赖了老版本,所以可能你运行的是lucene4.5,但实际上看到的索引文件是Lucene41_0.doc。对于几个期望更灵活的类和格式,lucene采取注册查找的方式来获得。NamedSPILoader就是负责查找Codec,PostingFormat和DocValuesFormat的类,而注册的类会放在下面的文件里。org.apache.lucene.codecs.lucene41.Lucene41Codec便是配置在Codec中的。
转自:http://blog.csdn.net/liweisnake/article/details/10956645
转载于:https://www.cnblogs.com/bonelee/p/6393911.html
lucene索引文件格式相关推荐
- Lucene学习总结之四:Lucene索引过程分析
对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后 ...
- Lucene学习总结之三:Lucene的索引文件格式(1)
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- Lucene学习总结之三:Lucene的索引文件格式(2)
2019独角兽企业重金招聘Python工程师标准>>> 四.具体格式 上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向 ...
- Lucene学习之四:Lucene的索引文件格式(3)
本文转载自:http://www.cnblogs.com/forfuture1978/archive/2010/02/02/1661436.html ,略有删改和备注. 四.具体格式 4.2. 反向信 ...
- Lucene随笔-Lucene的索引文件格式
Lucene 6.5.1 建立一个Lucene示例 数据写入 public class Writer {private static final String PATH = ""; ...
- 影响Lucene索引速度原因以及提高索引速度技巧
在网上看了一篇外文文章,里面介绍了提高Lucene索引速度的技巧,分享给大家. 先来看下影响索引的主要因素: MaxMergeDocs 该参数决定写入内存索引文档个数,到达该数目后就把该内存索引写入硬 ...
- 数据检索---基于Lucene索引
有了大量的数据之后,想要找到特定的数据,模糊查询,也是一个巨大的挑战.这里有来一起回顾下Lucene索引.(以下很多来自百度百科,算作是科普吧) 说起Lucene,它是apache软件基金会jakar ...
- lucene索引MySQL原因_影响Lucene索引速度原因以及提高索引速度技巧
在网上看了一篇外文文章,里面介绍了提高Lucene索引速度的技巧,分享给大家. 先来看下影响索引的主要因素: MaxMergeDocs 该参数决定写入内存索引文档个数,到达该数目后就把该内存索引写入硬 ...
- Luke 5—— 可视化 Lucene 索引查看工具,可以查看ES的索引
Luke 5 发布,可视化 Lucene 索引查看工具 oschina 发布于2015年08月31日 这是一个主要版本,该版本支持 Lucene 5.2.0. 它支持 elasticsearch ...
最新文章
- 深夜,你的手机为谁开?
- ORACLE锁学习总结
- 在看世界杯的闲暇看看电视剧《长恨歌》
- Python | 常见的反爬及解决方法,值得收藏
- weblogic apache 整合 代理
- 饭卡管理系统学生E-R图
- 2017年12款小型企业的最佳杀毒软件 你知道几个?
- 算丰征途「SOPHON盘古无人驾驶系统」基本框架介绍
- dellR230服务器如何进PE系统,戴尔服务器怎么进入u盘启动模式 选择oneshotbios
- 金蝶中间件公司CTO袁红岗
- 记一次失败的面试经历
- WARNING: The repository located at mirrors.aliyun.com is not a trusted or secure host and is being i
- React父组件调用子组件的方法【class组件和函数组件】
- fbx sdk android,FBX SDK环境配置
- c语言延空指令,单片机C言语编程空指令发作短延时怎么办
- Altium Designer 22安装步骤
- 冲突域和广播域交换机模式的基础理解
- 第7章 - 多无人机系统的协同控制 --> 多无人机协同控制
- 移动硬盘选购锦囊2.0版
- java byte中存大于0x7E的十六进制数
热门文章
- mysql自动挂载存储_Linux开机自动挂载存储
- php xml转化为html,php将xml文件转换为html Web程序 - 贪吃蛇学院-专业IT技术平台
- 每天一个linux命令(23):Linux 目录结构
- 【Java从0到架构师,mysql视频教程推荐
- 准备Java面试?mysql用户远程访问授权
- 【深度学习】基于Pytorch进行深度神经网络计算(二)
- python【蓝桥杯vip练习题库】BASIC-23芯片测试(统计)
- python基础练习(一)
- oracle取两个小时内的数据,【求解】一个时间条件,查两个不同时间段数据怎么查...
- mysql group by取条数最多_mysql获取group by总记录行数的方法