zoukankan      html  css  js  c++  java
  • lucene索引文件格式

    转自:http://blog.csdn.net/whuqin

    本文介绍下lucene生成的索引有哪些文件组成,每个文件包含了什么信息。基于Lucene 4.10.0。

    数据结构

    索引(index)包含了存储的文档(document)正排、倒排信息,用于文本搜索。索引又分为多个段(segments),每个新添加的doc都会存到一个新segment中,不同的segments又会合并成一个segment。segment存储着具体的documents,每个doc有一系列的字段(field)组成,一个field的值是多个词(term),一个term是以一些bytes。其递进关系如下: 
    index -> segments -> documents -> fields -> terms

    文件介绍

    全局性文件

    segments_N: 记录索引的段数、各段名、各段中文档数、删除数和更新数。可能有多个segments_N文件,最大N的segments_N是有效文件。 
    segments.gen: 记录当前index的代数(generation),即segments_N的最大N 
    write.log:阻止多个IndexWriter同时修改索引,一次只能有一个IndexWriter

    段文件

    这里写图片描述

    • 段描述 
      xxx.si: 段的元数据,如此段的文档数及相关文件 
      xxx.del:删除的doc
    • field信息 
      xxx.fnm:field names,field名称、索引方式 
      xxx.fdx:field index,索引xxx.fdt 
      xxx.fdt:field data,存储stored fields
    • term信息 
      xxx.tip:term index,xxx.tim的索引,实现对xxx.tim的随机存取 
      xxx.tim:term dictionary,按字典顺序排列的terms,其值指向.doc/.pos 
      xxx.doc:倒排列表,term所在的docs、在doc中的频率 
      xxx.pos:倒排列表,term在doc中的位置 
      xxx.pay:payloads and offsets,term在doc中的offset 
      注意:term的位置及频率都是在某doc下term在field中的位置和偏移,位置以切词为单位,偏移以字符为单位
    • term vector 
      term vector用于打分,存储StoreTermVectors的field 
      xxx.tvx:term vector index,每个doc在xx.tvd、xx.tvf中的位置 
      xxx.tvd:term vector data file,每个doc的term vector field信息在xxx.tvf中的位置 
      xxx.tvf:term vector fields,field的term列表及各term的频率、位置或者偏移
    • 归一化 
      lucene为doc算分时根据各doc中的term weight(term对doc的重要性),但是不同的doc重要性不同、不同的field重要性不同、不同的文档长度也不同,要想让不同文档的term weight之间有可比性(打分有可比性)需要进行归一化。用于归一化的因子(normalization factors),如doc和field的boost factor及长度,存在如下文件中。 
      xxx.nvm:norms metadata 
      xxx.nvd:norms data
    • doc values 
      存储DocValues类型的field,通过field value可以获取对应的doc number列表, 便于进行一些概括或者打分。类型为docvalue的field在doc不能重名。 
      xxx.dvm:DocValues metadata 
      xxx.dvd:DocValues data

    总结

    从上节可以看出 正排信息存储在:段(segments_N) -> field (.fnm/.fdx/.fdt) -> term (./tvx/.tvd/.tvf) 
    倒排信息存储在:词典(.tim) ->倒排表(.doc/.pos) 
    lucene索引结构图
    参考见: 
    https://lucene.apache.org/core/4_10_0/core/org/apache/lucene/codecs/lucene410/package-summary.html#package_description 
    https://lucene.apache.org/core/3_0_3/fileformats.html 
    http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html

  • 相关阅读:
    编程官方文档中常见的参数格式说明
    console.dir()和console.log()的区别
    JS中逗号运算符的用法
    Image 对象事件
    git已经删除了远程分支,本地仍然能看到
    Nginx初入
    WebApi设置SessionState为Required
    WebAPI2使用AutoFac依赖注入完整解决方案。
    CodeFirst时使用T4模板
    mysql5.7 java读取乱码
  • 原文地址:https://www.cnblogs.com/bonelee/p/6225742.html
Copyright © 2011-2022 走看看