今天,我们来了解一下Lucene的域的元数据信息—>.fnm。 一个段包含多个域,每个域都存储一下元数据。fnm文件的详细数据格式大致如下: 如同上面对段的信息的介绍一般,我们来一个个地看一下域中各个不同存储区域的具体含义和作用。
如果要详细地深入了解域的元数据信息,则需要下面几点:
位置和偏移量的区别:位置是基于词的,偏移量是基于字母或者汉字的;索引域与存储域的区别:一个文档中有的数据可能不需要被索引,但是当用户搜索到该文档时,这些数据希望一同返回,这样可以节省系统再到具体的数据存储区域去查找到必要的数据并填充进来。也就是说这些数据是冗余数据,没有被索引的必要;payload的作用:它是存储在倒排表中,和文档号一同存储的和具体每篇文档所相关的一些关键信息,比如用户自定义的文档ID,而不是系统Lucene所默认生成的ID;这样当系统在倒排表中查找到相应的数据中之后就不必再为了这些数据而再次去存储域中查找了,大大地提高了查询效率;它的存储方式大概如下:了解了fnm文件之后,和域相关的文件还有fdx、fdt两种,下面就让我们来深入了解一下这两种文件的详细情况。 由这幅图我们可以清晰地看到,fdx文件其实是fdt文件的一个索引文件,也就是域索引文件,而fdt文件才是真正的存储域数据的文件。 我们来由下往上看,fdt文件一共有segment.size项,也就是一个一个段所包含的文档数量。每一篇文档都在fdt文件中有一个对应的映射区域;对于每一篇文档,其存储的信息大概是:
看完fdt文件,我们再来看一下fdx文件,其是由一个个的fieldValuePosition组成,其代表的是对应的域在fdt文件中相对起始位置的偏移量(节约存储空间)。
我们看完域的数据存储格式和相关信息之后,还剩下的就是最低层的存储数据单元了–词向量的数据信息。
我们在此先从整体上来看一下词的存储情况: 相信看过上面对域的数据存储分析之后,大家在看到这幅图时一定一眼就明白词向量的大概存储情况了吧,很明显,三个文件—->tvx、tvd、tvf,分别代表词向量索引文件,词向量文档文件、词向量域文件。
以上都是索引的正向信息,下一篇我们将再去了解一下反向信息,敬请期待。
新闻热点
疑难解答