首页 > 学院 > 开发设计 > 正文

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

2019-11-08 18:21:49
字体:
来源:转载
供稿:网友

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

接上一篇Lucene初探之数据格式详情(-)

补充一下Segment_N文件的具体格式:

DocStoreOffsetDocStoreSegmentDocStorelsCompoundFile Lucene中存储域和词向量有两种方案。第一种是每个段单独存储自己的域和词向量信息;第二种是多个段共享域和词向量,把域和词向量存储到一个段里面去。如果DocStoreOffset值为-1,则该Segment段的后续正向相关信息的存储采用第一种方案,即单独存储自己的域和词向量信息;也就是说当前segment的段名为A,则当前索引目录下便会有相应的A.fdt,A.fdx,A.tvf,A.tvd,A.tvx文件等,DocStoreSegment和DocStoreCompoundFile则不存在;当DocStoreOffset不为-1,则代表当前段的信息存储方案是第二种方案,即和其它段共享。此时,DocStoreOffset的值为当前段的域和词向量信息在共享段中的位置偏移量,而DocStoreSegment则存储了共享存储段的名称,比如共享存储段名为B,那么此段的信息将被存储在B.fdt,B.fdx等文件中;IndexWrtier.flush(boolean triggerMerge, boolean flushDocStores, boolean flushDeletes),这个方法中的flushDocStores是用来设置是否采用共享存储的方案,最终,其会落到DocumentsWriter.closeDocStore()方法,如果flushDocStores为false,则这个方法不被调用,那么下次再添加新的信息进来的时候,由于上一次打开的DocumentsWriter还没有被关闭掉,则本次添加的信息会写入同上一次写入的文件相同的段文件中。HasSingeNormFile 之前我们介绍过,在调用搜索引擎进行搜索操作的时候,搜索引擎最终会对匹配到的文件进行一次权重打分,其中标准化因子在打分的过程中发挥了很大的作用;不同的文档的域都可以有自己的标准化因子,当HasSingleNormFile的值为1的时候,所有的标准化因子都存在.nrm文件中,表示所有的文档都以统一的标准化因子来打分;如果不为1,则每个段都可以在.fN文件中设置自己的标准化因子,其中N为版本号。NumField 域的数量;NormGen 是一个数组;如果每个域都有自己的标准化因子,则数组描述每个标准化因子文件的版本号;isCompoundFile 是否为复合文件,也就是将同一个段的所有文件保存在同一个文件中,减少每次打开段的时候打开文件的数量,其可以通过IndexWriter.setUserCompoundFile()来控制;DeletionCount 记录了此段中被删除文档的数目;Hasprox 可为0、1,如果有词频需要被保存,则将其置为1;checkSum 此文件的segment_N的校验和;

上面这些基本上是段的基本数据格式,下一篇我们去了解一下域的相关数据格式


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表