• DocStoreOffset
  • DocStoreSegment
  • DocStoreIsCompoundFile
    • 对于域(Stored Field)和词向量(Term Vector)的存储可以有不同的方式,即可以每个段(Segment)单独存储自己的域和词向量信息,也可以多个段共享域和词向量,把它们存储到一个段中去。
    • 如果DocStoreOffset为-1,则此段单独存储自己的域和词向量,从存储文件上来看,如果此段段名为XXX,则此段有自己的XXX.fdt,XXX.fdx,XXX.tvf,XXX.tvd,XXX.tvx文件。DocStoreSegment和DocStoreIsCompoundFile在此处不被保存。
    • 如果DocStoreOffset不为-1,则DocStoreSegment保存了共享的段的名字,比如为YYY,DocStoreOffset则为此段的域及词向量信息在共享段中的偏移量。则此段没有自己的XXX.fdt,XXX.fdx,XXX.tvf,XXX.tvd,XXX.tvx文件,而是将信息存放在共享段的YYY.fdt,YYY.fdx,YYY.tvf,YYY.tvd,YYY.tvx文件中。
    • 好在共享域和词向量存储并不是经常被使用到,实现也或有缺陷,暂且解释到此。

IndexWriter writer = new IndexWriter(FSDirectory.open(INDEX_DIR), new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED); 
      writer.setUseCompoundFile(false);

indexDocs(writer, docDir); 
      writer.flush();

//flush生成segment "_0",并且flush函数中,flushDocStores设为false,也即下个段将同本段共享域和词向量信息,这时DocumentsWriter中的docStoreSegment= "_0"。

indexDocs(writer, docDir); 
      writer.commit();

//commit生成segment "_1",由于上次flushDocStores设为false,于是段"_1"的域以及词向量信息是保存在"_0"中的,在这个时刻,段"_1"并不生成自己的"_1.fdx"和"_1.fdt"。然而在commit函数中,flushDocStores设为true,也即下个段将单独使用新的段来存储域和词向量信息。然而这时,DocumentsWriter中的docStoreSegment= "_1",也即当段"_2"存储其域和词向量信息的时候,是存在"_1.fdx"和"_1.fdt"中的,而段"_1"的域和词向量信息却是存在"_0.fdt"和"_0.fdx"中的,这一点非常令人困惑。 如图writer.commit的时候,_1.fdt和_1.fdx并没有形成。

indexDocs(writer, docDir); 
      writer.flush();

//段"_2"形成,由于上次flushDocStores设为true,其域和词向量信息是新创建一个段保存的,却是保存在_1.fdt和_1.fdx中的,这时候才产生了此二文件。

indexDocs(writer, docDir); 
      writer.flush();

//段"_3"形成,由于上次flushDocStores设为false,其域和词向量信息是共享一个段保存的,也是是保存在_1.fdt和_1.fdx中的

indexDocs(writer, docDir); 
      writer.commit();

//段"_4"形成,由于上次flushDocStores设为false,其域和词向量信息是共享一个段保存的,也是是保存在_1.fdt和_1.fdx中的。然而函数commit中flushDocStores设为true,也意味着下一个段将新创建一个段保存域和词向量信息,此时DocumentsWriter中docStoreSegment= "_4",也表明了虽然段"_4"的域和词向量信息保存在了段"_1"中,将来的域和词向量信息却要保存在段"_4"中。此时"_4.fdx"和"_4.fdt"尚未产生。

indexDocs(writer, docDir); 
      writer.flush();

//段"_5"形成,由于上次flushDocStores设为true,其域和词向量信息是新创建一个段保存的,却是保存在_4.fdt和_4.fdx中的,这时候才产生了此二文件。

indexDocs(writer, docDir); 
      writer.commit(); 
      writer.close();

//段"_6"形成,由于上次flushDocStores设为false,其域和词向量信息是共享一个段保存的,也是是保存在_4.fdt和_4.fdx中的

  • HasSingleNormFile

    • 在搜索的过程中,标准化因子(Normalization Factor)会影响文档最后的评分。
    • 不同的文档重要性不同,不同的域重要性也不同。因而每个文档的每个域都可以有自己的标准化因子。
    • 如果HasSingleNormFile为1,则所有的标准化因子都是存在.nrm文件中的。
    • 如果HasSingleNormFile不是1,则每个域都有自己的标准化因子文件.fN
  • NumField
    • 域的数量
  • NormGen
    • 如果每个域有自己的标准化因子文件,则此数组描述了每个标准化因子文件的版本号,也即.fN的N。
  • IsCompoundFile
    • 是否保存为复合文件,也即把同一个段中的文件按照一定格式,保存在一个文件当中,这样可以减少每次打开文件的个数。
    • 是否为复合文件,由接口IndexWriter.setUseCompoundFile(boolean)设定。
    • 非符合文件同符合文件的对比如下图:
非复合文件: 
复合文件: 
    • DeletionCount

      • 记录了此段中删除的文档的数目。
    • HasProx
      • 如果至少有一个段omitTf为false,也即词频(term freqency)需要被保存,则HasProx为1,否则为0。
    • Diagnostics
      • 调试信息。
  • User map data
    • 保存了用户从字符串到字符串的映射Map
  • CheckSum
    • 此文件segment_N的校验和。

读取此文件格式参考SegmentInfos.read(Directory directory, String segmentFileName):

  • int format = input.readInt();
  • version = input.readLong(); // read version
  • counter = input.readInt(); // read counter
  • for (int i = input.readInt(); i > 0; i--) // read segmentInfos
    • add(new SegmentInfo(directory, format, input));

      • name = input.readString();
      • docCount = input.readInt();
      • delGen = input.readLong();
      • docStoreOffset = input.readInt();
      • docStoreSegment = input.readString();
      • docStoreIsCompoundFile = (1 == input.readByte());
      • hasSingleNormFile = (1 == input.readByte());
      • int numNormGen = input.readInt();
      • normGen = new long[numNormGen];
      • for(int j=0;j
      • normGen[j] = input.readLong();
    • isCompoundFile = input.readByte();
    • delCount = input.readInt();
    • hasProx = input.readByte() == 1;
    • diagnostics = input.readStringStringMap();
  • userData = input.readStringStringMap();
  • final long checksumNow = input.getChecksum();
  • final long checksumThen = input.readLong();

转载于:https://www.cnblogs.com/bonelee/p/6394132.html

lucene正向索引(续)——每次commit会形成一个新的段,段_1的域和词向量信息可能存在_0.fdt和_0.fdx”中...相关推荐

  1. lucene正向索引(续)——域(Field)的元数据信息在.fnm里,在倒排表里,利用跳跃表,有利于大大提高搜索速度。...

    4.1.2. 域(Field)的元数据信息(.fnm) 一个段(Segment)包含多个域,每个域都有一些元数据信息,保存在.fnm文件中,.fnm文件的格式如下: FNMVersion 是fnm文件 ...

  2. lucene正向索引——正向信息,Index – Segments (segments.gen, segments_N) – Field(fnm, fdx, fdt) – Term (tvx, ...

    转自:http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623599.html 上面曾经交代过,Lucene保存了从Index到Segm ...

  3. 【FLink】Flink exactly once 每次都是产生一个新的生产者吗?

    本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 文章目录 1.概述 1.概述 问个问题 Flink 2阶段提交kafka的时候 每个批次的数据 都是Ne ...

  4. 可以刷新页面的随机php接口,随机一言 API 接入方法,每次刷新都会带来一个新的语句...

    # Method: GET/POST # 请求地址 # https://api.ooopn.com/yan/api.php # 请求参数 # type js json – 默认类型 text – 随机 ...

  5. Lucene学习总结之三:Lucene的索引文件格式(1)

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  6. Lucene学习总结之三:Lucene的索引文件格式(2)

    2019独角兽企业重金招聘Python工程师标准>>> 四.具体格式 上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向 ...

  7. Lucene随笔-Lucene的索引文件格式

    Lucene 6.5.1 建立一个Lucene示例 数据写入 public class Writer {private static final String PATH = ""; ...

  8. Lucene.Net---1索引的建立

    转载地址:http://blog.csdn.net/xuezhongsong/article/details/4388241 在建立索引前,先了解下lucene中的一些与索引相关的重要类. 为了对文档 ...

  9. Lucene的索引链结构_IndexChain

    Lucene将索引文档的过程设计成两个阶段,写入内存阶段和写入硬盘阶段.在写入内存阶段,Lucene通过IndexChain把document分解并把相关信息存储到内存中,等到满足flush条件(内存 ...

最新文章

  1. 前端请求接口出现的跨域问题
  2. 在java web项目中实现随项目启动的额外操作
  3. sharepoint2010 SP1 chrome 时常无滚动条
  4. leetcode 77. 组合 思考分析
  5. 报名即将截止,“梧桐杯”大数据应用创新大赛,邀你进入大数据先锋阵营
  6. Php 安装 zend_loader,在Linux系统中为PHP5.x安装Zend Guard Loader
  7. 年轻就是程序员的资本?我不敢苟同!
  8. 360浏览器Linux版内核,360安全浏览器国产操作系统版下载,附特色功能介绍
  9. ONES X 中农网|多产品线研发项目管理实践
  10. bs结构管理系统 服务器多少钱,购买BS或CS架构的进销存软件哪个更划算
  11. java 412_http 412问题
  12. .Net Core 使用Swagger,且使用自定义UI(Knife4jUI)
  13. 一个优秀程序员可抵五个普通程序员!
  14. 中科大843信号与系统中国科学技术大学843信号与系统138,总分420+上岸经验帖
  15. iOS开发简历这样写,面试电话接到手软
  16. Beyond Homophily in Graph Neural Networks: Current Limitations and Effective Designs 论文理解
  17. 微信公众号平搜索排名,如何让公众号搜索排名靠前,公众号文章关键词排名规则
  18. (附源码)spring boot大学生综合素质测评系统 毕业设计162308
  19. 倾一世烟花,爱已成痴
  20. 股票交易软件的python编程_GitHub - yutuer/stock-1: stock,股票系统。使用python进行开发。...

热门文章

  1. 计算机仿真氢光谱实验,氢氘灯光谱实验报告..docx
  2. php怎么随机生成二个中文,PHP生成随机字符串的两种办法
  3. mysql max和order by_mysql – 为什么MAX()比ORDER BY慢100倍… LIMIT 1?
  4. linux yum 安装mysql_Linux下使用yum安装MySQL
  5. 网络口协商_以太网端口协商解析
  6. 方舟生存进化服务器修改代码,方舟生存进化服务器代码怎么使用
  7. 古塔问题matlab,基于 Matlab 对古塔变形趋势探究的数学模型
  8. java opencv 开发环境_Java + opencv学习:在Eclipse下配置基于Java的OpenCV开发环境
  9. mysql明明有索引却用不到的情况
  10. 关于php的cgi,php-fpm的关系