搜索
搜 索
本版
文章
帖子
用户
图文精华
hadoop-2.6.0+zookeeper-3.4.6+hbase-1.0.0+hive-1.1.0完全分布 ...
首页
Portal
专题
BBS
面试
更多
登录
注册
用户组:游客
主题
帖子
云币
我的帖子
我的收藏
我的好友
我的勋章
设置
退出
导读
博客
群组
今日排行
本周排行
本周热帖
本月排行
本月热帖
会员排行
About云
»
专题
›
技术学习(版主发帖区)
›
大数据学习
›
Solr|Nutch|Lucene|ES
›
连载型
›
基于lucene的案例开发:索引文件结构
0
0
0
分享
基于lucene的案例开发:索引文件结构
gefieder
2015-4-13 23:10:08
发表于
连载型
[显示全部楼层]
阅读模式
关闭右栏
0
12493
本帖最后由 pig2 于 2015-4-14 00:38 编辑
问题导读
1.lucene索引结构是层次结构,主要有哪几个层次?
2.索引的最小单位是什么?
3.索引(Index)与段什么关系?
4.段什么情况下会合并?
5.write.lock文件有几种?
6.什么是正向信息与反向信息?
前面我们已经介绍了非结构数据的检索过程以及lucene的数学模型,这篇博客就主要介绍一下lucene索引的文件结构,下图是lucene生成的索引实例:
lucene索引结构是层次结构,主要有以下几个层次:
索引(Index)
在lucene中,一个索引是放在一个文件夹中的,上述实例中的所有文件就组成了lucene索引
段(Segment)
一个索引中可以有很多段,段与段之间是独立的,添加新的文档可能会生成新段,不同的段可以合并生成一个新段,上图中相同的前缀文件就属于同一个段(图中共有两个段 _0 和 _1),当段的个数达到一定数量,段与段直接会合并,生成新段;segments.gen和segment_2既是段的元数据文件,也保存了段的属性信息。
文档(Document)
文档是创建索引的基本单位,不同的文档保存在不同的段中,一个段可以包含所个文档,新添的文档保存在一个新生成的一个段中,随着段的合并,不同的段会合并成一个新段。
域(Field)
一个文档包含不同类型的信息,可以拆分开索引,比如小说信息可以有书名、作者名、更新时间、简介、更新时间等属性,这些都可以保存在不同的域中。
词(Term)
词是索引的最小单位,是经过词法分析和语言处理后的字符串,
上篇博客中
的N维空间向量,每一个维度都是一个词。
正向信息&反向信息
lucene的索引结构中,即保存了正向信息,也保存了反向信息。
所谓的正向信息就是安层次保存了从索引一直到词的包含关系:索引-->段-->文档-->域-->词,即此索引包含了哪些段,每个段包含了哪些文档,每个文档包含了哪些域,每个域域又包含了那些词。
如上图中,包含正向信息的文件有:
segment_2 保存了此索引包含了多少段,每个段包含了多少篇文档;
xxx.fdx , xxx.fdt 保存了此段的所有文档,每篇文档包含了多少域,每个域保存了哪些信息;
xxx.fnm 保存了此段包含了多少域,每个域的名称以及索引方式;
xxx.tvx , xxx.tvd , xxx.tvf 保存了此段包含了多少文档,每篇文档包含了多少域,每个域包含了多少词,每个词的字符串、位置等信息。
(这里需要说声歉意,上图的索引文件截图是基于lucene4.3.1创建出来的,文件结构和之前的版本有了很大的改动,自己查找了很多资料都没有找到新的对应关系,所以这部分还是按照之前的文件结构来介绍的,最后后附录之前的索引文件结构)
所谓反向信息保存了词典的倒排表的映射:词-->文档,包含反向信息的文件有:
xxx.tis xxx.tii 保存了词典,即此段包含的所有的词按字典的顺序排序;
xxx.frd 保存了倒排表,也即是每个词的文档ID列表;
xxx.prx 保存了倒排表中的每个词在文档中的位置。
lock
上图中还有一个重要的write.lock文件
,lucene中目前有write.lock和commit.lock两种,write.lock是在对索引文件进行修改的时候生成的,这个时候IndexWrite的操作或者IndexReader 删除Document或取消删除都会抛出异常;commit.lock是在segments文件被读取活合并的时候生成的,当IndexReader读取索引文件之前会获得commit.lock,当segments被读取完毕的时候会被释放。
lucene3.0的索引文件结构如下图:
注:关于lucene4.3.1创建的文件结构自己将会继续查找相关资料,希望可以早日找到相关说明;如谁了解该问题,还请给出相关介绍或链接。
ps: lucene的原理部分就到这里结束了,下篇博客就开始介绍一些案例中可能会用到的API。
欢迎加入about云群371358502、39327136,云计算爱好者群,亦可关注
about云腾讯认证空间
||
关注本站微信
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
没找到任何评论,期待你打破沉寂
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
发表新帖
gefieder
实习版主
关注
133
主题
195
帖子
14
粉丝
TA的主题
Hadoop的Server及其线程模型分析
2015-7-27
impala学习总结
2015-7-27
STORM在线业务实践-集群空闲CPU飙高问题排查
2015-7-23
从Hadoop到Spark的架构实践
2015-7-22
如何将nodeclub构建成Docker镜像
2015-7-22
24小时热文
哈佛通识教育红皮书 (北大高等教育文库·大
代码精进之路:从码农到工匠
为什么面试难!一文帮我们看透本质,拿捏of
程序员薪资排名,AI位居榜首,平均年薪277
Django实战:Python Web典型模块与项目开发
关闭
推荐
/2
中文版ChatGPT
1.无需魔法 2.提高编程效率 3.提高文档能力
查看 »
新手帮助
新手帮助:注册遇到问题,领取资源,加入铁粉群,不会使用搜索,如何获取积分等
查看 »
意见
反馈