lucene正向索引(续)——每次commit会形成一个新的段,段_1的域和词向量信息可能存在_0.fdt和_0.fdx”中...
- 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); indexDocs(writer, docDir); //flush生成segment "_0",并且flush函数中,flushDocStores设为false,也即下个段将同本段共享域和词向量信息,这时DocumentsWriter中的docStoreSegment= "_0"。 indexDocs(writer, docDir); //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); //段"_2"形成,由于上次flushDocStores设为true,其域和词向量信息是新创建一个段保存的,却是保存在_1.fdt和_1.fdx中的,这时候才产生了此二文件。 indexDocs(writer, docDir); //段"_3"形成,由于上次flushDocStores设为false,其域和词向量信息是共享一个段保存的,也是是保存在_1.fdt和_1.fdx中的 indexDocs(writer, docDir); //段"_4"形成,由于上次flushDocStores设为false,其域和词向量信息是共享一个段保存的,也是是保存在_1.fdt和_1.fdx中的。然而函数commit中flushDocStores设为true,也意味着下一个段将新创建一个段保存域和词向量信息,此时DocumentsWriter中docStoreSegment= "_4",也表明了虽然段"_4"的域和词向量信息保存在了段"_1"中,将来的域和词向量信息却要保存在段"_4"中。此时"_4.fdx"和"_4.fdt"尚未产生。 indexDocs(writer, docDir); //段"_5"形成,由于上次flushDocStores设为true,其域和词向量信息是新创建一个段保存的,却是保存在_4.fdt和_4.fdx中的,这时候才产生了此二文件。 indexDocs(writer, docDir); //段"_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
- 调试信息。
- DeletionCount
- User map data
- 保存了用户从字符串到字符串的映射Map
- CheckSum
- 此文件segment_N的校验和。
读取此文件格式参考SegmentInfos.read(Directory directory, String segmentFileName):
|
转载于:https://www.cnblogs.com/bonelee/p/6394132.html
lucene正向索引(续)——每次commit会形成一个新的段,段_1的域和词向量信息可能存在_0.fdt和_0.fdx”中...相关推荐
- lucene正向索引(续)——域(Field)的元数据信息在.fnm里,在倒排表里,利用跳跃表,有利于大大提高搜索速度。...
4.1.2. 域(Field)的元数据信息(.fnm) 一个段(Segment)包含多个域,每个域都有一些元数据信息,保存在.fnm文件中,.fnm文件的格式如下: FNMVersion 是fnm文件 ...
- 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 ...
- 【FLink】Flink exactly once 每次都是产生一个新的生产者吗?
本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 文章目录 1.概述 1.概述 问个问题 Flink 2阶段提交kafka的时候 每个批次的数据 都是Ne ...
- 可以刷新页面的随机php接口,随机一言 API 接入方法,每次刷新都会带来一个新的语句...
# Method: GET/POST # 请求地址 # https://api.ooopn.com/yan/api.php # 请求参数 # type js json – 默认类型 text – 随机 ...
- Lucene学习总结之三:Lucene的索引文件格式(1)
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- Lucene学习总结之三:Lucene的索引文件格式(2)
2019独角兽企业重金招聘Python工程师标准>>> 四.具体格式 上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向 ...
- Lucene随笔-Lucene的索引文件格式
Lucene 6.5.1 建立一个Lucene示例 数据写入 public class Writer {private static final String PATH = ""; ...
- Lucene.Net---1索引的建立
转载地址:http://blog.csdn.net/xuezhongsong/article/details/4388241 在建立索引前,先了解下lucene中的一些与索引相关的重要类. 为了对文档 ...
- Lucene的索引链结构_IndexChain
Lucene将索引文档的过程设计成两个阶段,写入内存阶段和写入硬盘阶段.在写入内存阶段,Lucene通过IndexChain把document分解并把相关信息存储到内存中,等到满足flush条件(内存 ...
最新文章
- 前端请求接口出现的跨域问题
- 在java web项目中实现随项目启动的额外操作
- sharepoint2010 SP1 chrome 时常无滚动条
- leetcode 77. 组合 思考分析
- 报名即将截止,“梧桐杯”大数据应用创新大赛,邀你进入大数据先锋阵营
- Php 安装 zend_loader,在Linux系统中为PHP5.x安装Zend Guard Loader
- 年轻就是程序员的资本?我不敢苟同!
- 360浏览器Linux版内核,360安全浏览器国产操作系统版下载,附特色功能介绍
- ONES X 中农网|多产品线研发项目管理实践
- bs结构管理系统 服务器多少钱,购买BS或CS架构的进销存软件哪个更划算
- java 412_http 412问题
- .Net Core 使用Swagger,且使用自定义UI(Knife4jUI)
- 一个优秀程序员可抵五个普通程序员!
- 中科大843信号与系统中国科学技术大学843信号与系统138,总分420+上岸经验帖
- iOS开发简历这样写,面试电话接到手软
- Beyond Homophily in Graph Neural Networks: Current Limitations and Effective Designs 论文理解
- 微信公众号平搜索排名,如何让公众号搜索排名靠前,公众号文章关键词排名规则
- (附源码)spring boot大学生综合素质测评系统 毕业设计162308
- 倾一世烟花,爱已成痴
- 股票交易软件的python编程_GitHub - yutuer/stock-1: stock,股票系统。使用python进行开发。...
热门文章
- 计算机仿真氢光谱实验,氢氘灯光谱实验报告..docx
- php怎么随机生成二个中文,PHP生成随机字符串的两种办法
- mysql max和order by_mysql – 为什么MAX()比ORDER BY慢100倍… LIMIT 1?
- linux yum 安装mysql_Linux下使用yum安装MySQL
- 网络口协商_以太网端口协商解析
- 方舟生存进化服务器修改代码,方舟生存进化服务器代码怎么使用
- 古塔问题matlab,基于 Matlab 对古塔变形趋势探究的数学模型
- java opencv 开发环境_Java + opencv学习:在Eclipse下配置基于Java的OpenCV开发环境
- mysql明明有索引却用不到的情况
- 关于php的cgi,php-fpm的关系