pursue wind pursue wind
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
  • mybatis

  • mybatis-plus

  • Spring

  • SpringBoot

  • SpringSecurity

  • SpringCloud

    • 文档

      • SpringCloud-广告系统实战(七)----广告检索系统(加载全量索引)
      • SpringCloud-广告系统实战(三)---通用模块的开发
      • SpringCloud-广告系统实战(二)---搭建脚手架
      • SpringCloud-广告系统实战(五)---广告检索系统(微服务调用)
      • SpringCloud-广告系统实战(六)----广告检索系统(广告数据索引的设计与实现)
        • 1.1 正向索引
        • 1.2 倒排索引(Inverted Index)
        • 全量索引 + 增量索引
      • SpringCloud-广告系统实战(四)---投放系统的开发
      • SpringCloud-广告系统设计与实现(一)---概述
      • SpringCloud微服务实战(一)-简介
      • SpringCloud微服务实战(七)-异步和消息
      • SpringCloud微服务实战(七)-消息服务在电商中的实践
      • SpringCloud微服务实战(三)-服务注册与发现
      • SpringCloud微服务实战(二)-微服务介绍
      • SpringCloud微服务实战(六)-统一配置中心
      • SpringCloud微服务实战(十)-Hystrix
      • SpringCloud微服务实战(四)-微服务中的服务拆分
    • Gateway

    • Spring Cloud Stream

    • Alibaba Sentinel 规则参数总结
    • Alibaba Sentinel规则持久化-拉模式-手把手教程【基于文件】
    • Feign常见问题总结
    • SentinelResource注解 属性总结
    • Spring Cloud Alibaba Sentienl相关配置项
    • SpringCloudAlibaba
    • SpringCloud入门
    • 使用Spring Cloud Feign上传文件
    • 如何使用Feign构造多参数的请求
    • 实用技巧:Hystrix传播ThreadLocal对象(两种方案)
    • 扩展Ribbon支持Nacos权重的三种方式
    • 扩展Ribbon支持基于元数据的版本管理
    • 搭建生产可用的Nacos集群
  • 单元测试框架Mockito
  • 框架
  • SpringCloud
  • 文档
pursuewind
2020-11-23
目录

SpringCloud-广告系统实战(六)----广告检索系统(广告数据索引的设计与实现)

# 0 联系我

1.Java开发技术交流Q群 (opens new window)

2.完整博客链接 (opens new window)

3.个人知乎 (opens new window)

4.gayhub (opens new window)

# 相关源码 (opens new window)

广告检索系统的核心是实现广告检索服务,为加快广告检索的速度,良好的索引设计是不可缺少的. 本文首先对索引的设计与维护进行介绍,之后,实现广告数据的索引服务.

# 1 广告数据索引设计介绍

# 1.1 正向索引

  • 定义 也称为正排索引(Forward Index),通过唯一键/主键生成与对象的映射关系. 即通过主键(Key)检索到文档(Doc)内容,以下简称正排表或Table.

Table 不仅提供按主键的增删除改查,也配合倒排表实现检索、过滤、读取等功能. 作为核心数据结构,Table必须支持频繁的字段读取和各类型的正排过滤,需要高效和紧凑的实现.

  • 一个简单的例子

正排存储结构 为支持按 docID 的随机访问,把Table设计为一个大数组结构(data区). 每个 doc 是数组的一个元素且长度固定,变长字段存储在扩展区(ext区),仅在 doc 中存储其在扩展区的偏移量和长度. 与大部分搜索引擎的列存储不同,将data区按行存储,这样可针对业务场景,尽可能利用CPU与内存之间的缓存来提高访问效率.

此外,针对NoSQL场景,可通过HashMap实现主键到docID的映射(idx文件),这样就可支持主键到文档的随机访问.由于倒排索引的docID列表可以直接访问正排表,因此倒排检索并不会使用该idx.

  • 小结 这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护.
    • 因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面
    • 若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除.

但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下,尽管正排表的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大.

# 1.2 倒排索引(Inverted Index)

即通过关键词(Keyword)检索到文档内容. 为支持复杂的业务场景,如遍历索引表时的算法粗排逻辑,在此抽象了索引器接口Indexer. 索引器接口定义

倒排表以字或词为关键字进行索引,表中关键字所对应的记录表 (opens new window)项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况.

由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率. 倒排存储结构

正排索引是从文档到关键字的映射(已知文档求关键字) 倒排索引是从关键字到文档的映射(已知关键字求文档)

  • 一个简单的例子

  • 在检索系统中的应用 核心用途是对各个维度限制的"整理"

# 2 广告数据索引维护

# 全量索引 + 增量索引

# 3 推广计划索引对象定义与服务实现

  • 索引接口

# 4 推广单元索引对象定义与服务实现

# 5 关键词索引对象定义与服务实现

# 6 兴趣索引对象定义与服务实现

# 7 地域索引对象定义与服务实现

# 8 创意索引对象定义与服务实现

# 9 创意与推广单元关联索引对象定义与服务实现

# 10 索引服务类缓存的实现

# 参考

https://coding.imooc.com/class/chapter/310.html#Anchor https://tech.meituan.com/2018/05/11/adp-rtidx-ls.html https://blog.csdn.net/zhangzeyuaaa/article/details/48676775

Last Updated: 2023/02/14, 18:02:00
SpringCloud-广告系统实战(五)---广告检索系统(微服务调用)
SpringCloud-广告系统实战(四)---投放系统的开发

← SpringCloud-广告系统实战(五)---广告检索系统(微服务调用) SpringCloud-广告系统实战(四)---投放系统的开发→

Theme by Vdoing | Copyright © 2019-2023 pursue-wind | 粤ICP备2022093130号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜
  • 网络DJ