lucene初探之数据格式详情

Derrick_gu Derrick_gu     2022-12-12     577

关键词:

Lucene初探之数据格式详情(三)

今天,我们来了解一下Lucene的域的元数据信息—>.fnm。
一个段包含多个域,每个域都存储一下元数据。fnm文件的详细数据格式大致如下:

如同上面对段的信息的介绍一般,我们来一个个地看一下域中各个不同存储区域的具体含义和作用。

  • FNMVersion:代表fnm文件版本号;比如Lucene2.9版本对应的FNMVerion值为-2;
  • FieldsCount:如同字面意思一般,代表域的个数;
  • Filed X:代表具体的域存储信息,其也可以再次细分为:
    • FieldName:域名;
    • 8 bits:分别代表的含义如图所示;

如果要详细地深入了解域的元数据信息,则需要下面几点:

  • 位置和偏移量的区别:位置是基于词的,偏移量是基于字母或者汉字的;
  • 索引域与存储域的区别:一个文档中有的数据可能不需要被索引,但是当用户搜索到该文档时,这些数据希望一同返回,这样可以节省系统再到具体的数据存储区域去查找到必要的数据并填充进来。也就是说这些数据是冗余数据,没有被索引的必要;
  • payload的作用:它是存储在倒排表中,和文档号一同存储的和具体每篇文档所相关的一些关键信息,比如用户自定义的文档ID,而不是系统Lucene所默认生成的ID;这样当系统在倒排表中查找到相应的数据中之后就不必再为了这些数据而再次去存储域中查找了,大大地提高了查询效率;它的存储方式大概如下:

了解了fnm文件之后,和域相关的文件还有fdx、fdt两种,下面就让我们来深入了解一下这两种文件的详细情况。

由这幅图我们可以清晰地看到,fdx文件其实是fdt文件的一个索引文件,也就是域索引文件,而fdt文件才是真正的存储域数据的文件。
我们来由下往上看,fdt文件一共有segment.size项,也就是一个一个段所包含的文档数量。每一篇文档都在fdt文件中有一个对应的映射区域;对于每一篇文档,其存储的信息大概是:

  • 文档所包含域的个数fieldCount和每个域的详细信息fieldData;
  • 对于每一个fieldData文件,又分为fieldNum,一个8bit的扩展信息和真正的存储的域的值;其中8bit的最后一位代表此域是否被分词,倒数第二位代表当前数据是按照字符串存储的还是按照二进制存储的,倒数第三位代表此域是否经过压缩;

看完fdt文件,我们再来看一下fdx文件,其是由一个个的fieldValuePosition组成,其代表的是对应的域在fdt文件中相对起始位置的偏移量(节约存储空间)。

我们看完域的数据存储格式和相关信息之后,还剩下的就是最低层的存储数据单元了–词向量的数据信息。

我们在此先从整体上来看一下词的存储情况:

相信看过上面对域的数据存储分析之后,大家在看到这幅图时一定一眼就明白词向量的大概存储情况了吧,很明显,三个文件—->tvx、tvd、tvf,分别代表词向量索引文件,词向量文档文件、词向量域文件。

  • tvx:一个段包含N篇文档,对应这里的N个DocFieldPosition,每一个DocFieldPosition又包含DocumentPosition和FieldPosition,其中DocumentPosition对应的是tvd文件中的位置偏移量,FieldPosition代表tvf文件中的对应位置偏移量;当然,tvx中还有一个TVXVersion,也就是当前txv文件的版本号;
  • tvd:一样,本文件除了TVDVerion之外,包含N个FieldInfomation,如上图所示;
  • tvf:类似tvd文件,但是在这里,对于每一个TermFreqs,其分别由TermText(词文本)、TermFreq(词频),Positions(词位置),offSet(词的偏移量信息)构成;

以上都是索引的正向信息,下一篇我们将再去了解一下反向信息,敬请期待。

lucene初探之数据格式详情(-)(代码片段)

Lucene初探之数据格式详情(-)在前两篇,我们介绍了Lucene的存储文件目录中的各个文件的大致关系。比如以层次规则保存的正向信息:索引–>段–>文档–>域–>词目录–>segment_N–>.fdx,.fdt–>.fnm–&... 查看详情

lucene初探之数据格式详情

Lucene初探之数据格式详情(六)在之前的几篇文章中,我们共同探索了Lucene创建索引文件时正向信息、反向信息和标准因子的存储方式和原理。在实际的生产应用环境中,由于业务等需要,我们不仅仅只是需... 查看详情

lucene初探之数据格式详情

Lucene初探之数据格式详情(六)在之前的几篇文章中,我们共同探索了Lucene创建索引文件时正向信息、反向信息和标准因子的存储方式和原理。在实际的生产应用环境中,由于业务等需要,我们不仅仅只是需... 查看详情

lucene初探之数据格式详情

Lucene初探之数据格式详情(四)之前我们介绍了索引存储文件中正向信息的存储情况,也就是关于被索引的文件数据在最终的存储详情中的组织结构,其展示了被索引的信息在索引文件中是如何被组织并最终存储起来的。但... 查看详情

lucene初探之数据格式详情

Lucene初探之数据格式详情(四)之前我们介绍了索引存储文件中正向信息的存储情况,也就是关于被索引的文件数据在最终的存储详情中的组织结构,其展示了被索引的信息在索引文件中是如何被组织并最终存储起来的。但... 查看详情

lucene初探之数据格式详情

Lucene初探之数据格式详情(五)在前几篇文章中我们了解了索引文件中关于索引的正向信息和反向信息的存储格式。除了正向信息和反向信息之外,还有一种不可或缺的信息也保存在索引文件中–索引因子。我们在开... 查看详情

lucene初探之索引文件格式

Lucene初探之索引文件格式了解Lucene的索引文件存储方式,是深入学习了解Lucene的第一步。只有了解索引的存储方式,才能在看最终的内部实现源码时不会一脸懵逼。我们可以根据Lucene的工作流程将对Lucene索引文件的操作... 查看详情

lucene初探之索引文件的基本类型与基本规则

Lucene初探之索引文件的基本类型与基本规则之前我们说过,索引文件是类似数据库一般,它是将分布在不同地方的数据按照一定的规则抽取出来,加以重新组织,使其成为结构化的数据,最终按照一定的特殊... 查看详情

lucene初探之索引过程分析

Lucene初探之索引过程分析(二)在上一个章节我们讲到Lucene的索引过程的起点是建立一个IndexWriter对象。在IndexWriter对象创建之后,我们将会创建Document文档对象,并且将其加入域(Field)。Documentdoc=newDoc... 查看详情

lucene初探之总体架构

从总体上来说,Lucene的可以被概括为三点:高效、可扩展的全文检索库;基于Java实现;支持对纯文本文件进行索引可搜索;Lucene的工作流程和架构如下所示:通过该图片,我们可以看出,Lucene的工... 查看详情

lucene初探之索引过程分析

Lucene初探之索引过程分析(一)经过上面的学习,我们对于Lucene的索引文件的存储原理有了初步的了解,不过了解了这些只是为随后的操作Lucene打下了一个很小的基础,我们无法依靠这些知识就去自完成搜索... 查看详情

lucene初探之如何创建索引

上一篇我们简单了解了索引是啥,为什么要创建索引以及索引里面存些什么,现在我们来看看如何去创建一个索引。全文检索库的索引创建过程一般都是分为以下几个步骤:First:一些要索引的原文档我们使用以... 查看详情

lucene初探之如何创建索引

上一篇我们简单了解了索引是啥,为什么要创建索引以及索引里面存些什么,现在我们来看看如何去创建一个索引。全文检索库的索引创建过程一般都是分为以下几个步骤:First:一些要索引的原文档我们使用以... 查看详情

lucene初探之索引过程分析

Lucene初探之索引过程分析(二)在上一个章节我们讲到Lucene的索引过程的起点是建立一个IndexWriter对象。在IndexWriter对象创建之后,我们将会创建Document文档对象,并且将其加入域(Field)。Documentdoc=newDoc... 查看详情

lucene初探

Lucene是一个基于Java的全文检索库,它高效、开源。为什么叫它全文检索库呢?这得从人们生活中的数据结构来说起。人们在使用各种软件服务的时候会产生各种的数据,这些数据会被相关软件服务提供商按照不同的... 查看详情

lucene原理之概念

概念:    数据分两种:      1、结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。       2、非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等。(半结构化数据:如X... 查看详情

lucene初探-查询

lucene初探,是为了后面solr做准备的.如果跳过lucene,直接去看solr,估计有点懵. 由于时间的关系,lucene查询方法也有多个,所以单独出来. 一.精确查询/***获取查找对象*@return*@throwsException*/privateIndexSearchergetSearcher()throwsException{//1.... 查看详情

lucene初探

前言:  window文件管理右上角,有个搜索功能,可以根据文件名进行搜索.那如果从文件名上判断不出内容,我岂不是要一个一个的打开文件,查看文件的内容,去判断是否是我要的文件?  几个,十几个文件还好,如果是几百个甚至几... 查看详情