[lucene]Lucene学习1:倒排分析

基础#

倒排中主要是词典和词频位置等信息,倒排索引的设计要考虑两点:压缩和存取性能,在介绍具体的倒排索引前要明晰Lucene中的几个概念

  1. PackedBlock和VIntBlock
    固定长度的block(128)和变长的block,在一个PackedBlock中的一定是不同的数据,在VIntBlock中的可以是多种类型的数据

  2. Postions,payloads和Offsets
    position
    指的是这个term在doc中的位置
    offset
    是基于字母的位置

    position & offsets

    payload
    是针对每一个词的一些额外数据,这是一个高级功能,例如:

  1. 我希望创建一个倒排,希望标识某个term是不是粗体的,那么,可以借助payload中标记,在检索时优先选出


    payload
  2. 希望给每一个doc一个自己的ID,
    给每一个doc加一个新的Id:myID,然后添加一个特殊的FieldID和TermID(都相同的ID),每一个文档都包括这个TermID
    的包括payload的posting,payload里保存myID,这样我们就能从docId找到myID了。这相当于添加了一个Doc级别的Payload
  3. 通过payload减小倒排大小(时间换空间)

3.SkipData Settings
skipInterval:Lucene是跳跃的步数

词典#

                           ┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓
                           ┃  PostingsHeader   ┃   TermMetadata    ┃
                           ┗━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━┛
                                     │                   │          
          ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─                               
                             │                           │          
          ▼                  ▼                ┌ ─ ─ ─ ─ ─           
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓                            
┃      Header      ┃  PackedBlockSize  ┃      │                     
┗━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━┛                            
                                              ▼                     
                                ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓       
                                ┃(DocFPDelta|SingletonDocID)┃       
                                ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛       

参考文档
1.http://lucene.apache.org/core/5_5_0/core/org/apache/lucene/codecs/lucene50/Lucene50PostingsFormat.html
2.http://www.ibm.com/developerworks/cn/opensource/os-cn-lucene-pl/
3.http://blog.csdn.net/forfuture1978/article/details/4976794

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容