广告系统

 

每个Document都是由多个field组成,每个field中包含一系列的词语,构建索引的目的是为了加快检索的速度,根据映射关系方向的不同,索引可以分为:

  • 倒排索引(index)

    倒排索引存储了从单词到DocID的映射关系,形如:

    词-->(Doc1,Doc2,...,DocN)

    倒排索引主要用在检索中,它能快速的定位用户查询到关键字对应的Document。

  • 正排索引(attribute)

    正排索引存储从DocID到field的映射关系,形如:

    DocID-->(term1,term2,...termn)

    正排索引分单值和多值两种,单值attribute由于长度是固定的(不包括string类型),因此查找效率高,而且可以支持更新。多值attribute表示某个field中有多个数据(数量不固定),由于长度不确定,因此查找效率相较与单值更慢,而且不能支持更新。

    正排索引主要是在查询到了某个Document后,根据docid值能快速获取到其attribute用来统计、排序、过滤中。

    目前引擎支持的正排字段基本类型包括:INT8(8位有符号数字类型), UINT8(8位无符号数字类型), INT16(16位有符号数字类型), UINT16(16位无符号数字类型), INTEGER(32位有符号数字类型), UINT32(32位无符号数字类型), INT64(64位有符号数字类型), UINT64(64位无符号数字类型), FLOAT(32位浮点数), DOUBLE(64位浮点数), STRING(字符串类型)

    多值的attribute只是一个field中可能出现数量不确定的单值attribute,引擎对上述的单值类型attribute都支持对应的多值attribute(例如multi_int8,multi_string)。

  • 摘要(summary)

    summary的存储形式与attribute类似,但是summary是将一个Document对应的多个field存储在一起,并且建立映射,所以能很快从docid定位到对应的summary内容。

    summary主要是用于结果的展示,一般而言summary的内容都比较大,对于每次查询而言不适合取过多的summary,只有最终需要展示结果的Document会取到对应的summary。

    由于summary过大,引擎在存储summary时提供压缩的机制,在schema中配置summary压缩,那么引擎在存储时会用zlib压缩后再存储,读取时引擎会先解压,再返回给用户。

5.2.1 倒排索引介绍

倒排索引的介绍:包括什么是倒排索引,倒排索引存储的基本组成。以及各个组成部分在检索中的作用。

  1. 什么是倒排索引?

    倒排索引也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。

  2. 倒排索引可以为我们做什么?

    通过倒排索引,可以快速定位单词所在的文档列表以及该词在文档中的位置,词频等信息。供信息分析使用。

  3. 通过倒排索引我们可以获取哪些信息?

     

    Table 5.1. 倒排索引存储信息列表

    信息名称描述
    ttf全称:total term frequency, 表示检索词在所有文档中出现的总次数
    df全称:document frequency, 表示包含检索词的文档总数
    tf全称:term frequency, 表示检索词在文档中出现的次数
    docid全称:document id, 是文档在引擎中的唯一标识,可以通过docid获取到原文档的其他信息。
    fieldmap全称:field map, 用于记录包含检索词的field信息(TODO: Link 什么是field??)
    section 信息用户可以为某些文档分段,然后为每一段添加附属信息。该信息可以在检索时取出,供后续处理使用
    position用于记录检索词在文档中的位置信息
    positionpayload全称:position payload, 用户可以为文档不同位置设置payload信息,并可以在检索时取出,供后续处理用
    docpayload全称:document payload, 用户可以为某些文档添加附属信息,并可以在检索时取出,供后续处理使用
    termpayload全称:term payload, 用户可以为某些词添加附属信息,并可以在检索时取出,供后续处理使用

     

  4. 倒排索引的基本结构有哪些?

     

    Table 5.2. 倒排索引的基本结构

    结构名称描述
    dictionary词典, 存储检索词和倒排链的映射信息。引擎可以通过词典查找检索词对应的倒排信息位置
    doclist全称:document list,存储包含检索词的文档信息
    positionlist全称:position list,存储每一篇文档中检索词所在的位置信息
    truncatelist全称:truncate list(截断链),用于提高引擎性能,根据用户的配置,将一些优质文档单独建倒排索引,以提高检索性能
    bitmap用于提高引擎性能,根据用户的配置,将一些倒排结构采用bitmap方式存储,以减少倒排所占空间,提高检索性能(TODO link 什么是bitmap?)

     

  5. 倒排索引检索的基本流程

    当用户查询单词M的倒排索引时,首先引擎会查询词典文件,找到索引词在倒排索引文件(posting文件)的起始位置。

    随后引擎通过解析倒排链,获取词M存储在倒排链的三部分信息:TermMeta,DocList, PositionList。

    TermMeta存储的是对索引词的基本描述,主要包括词的df、ttf、termpayload信息。

    DocList包含索引词的文档信息列表,文档信息包括:DocumentId,文档中的检索词频(tf), docpayload, 包含检索词的field信息(termfield)。

    PositionList是检索词在文档中的位置信息列表,主要包括检索词在文档中的具体位置(position)和positionpayload信息。

     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值