这就是搜索引擎——索引压缩

2023-11-15

对于海量数据,建立倒排索引往往需要较大的磁盘空间,尤其是一些常见的单词,这些单词对应的倒排列表可能有几百兆。如果搜索引擎在相应用户查询的时候,用户查询包含了常见的单词,就需要将大量的倒排列表信息从磁盘读入内存。
由于磁盘读写速度往往是个瓶颈,所以整个过程的速度会收到影响。索引压缩则可以利用数据压缩算法,有效的将数据量减少,这样一方面可以减少索引占用的磁盘空间资源,另一方面可以减少磁盘读写的数据量。

词典压缩

为了快速响应用户查询,词典往往会全部加载到内存中。为了减少词典所占内存,一般考虑词典压缩技术。以前介绍了hash加链表、B树以及FST。一般会存储三项数据:单词本身内容,文档频率信息DF以及指向倒排列表的指针信息。(如下图所示)
在这里插入图片描述
对于单词来说,可长可短,有的单词需要20个字节,有的只需要4个字节。为了能容纳最长的单词,我们给单词这一项分配了20个字节,这样就造成了浪费(内碎片)。
针对单词内容存储结构的一种优化措施是:将单词连续存储在某个内存区域,原先存储单词内容的部分由指向这个存储区对应单词起始位置的指针代替,单词结尾可以用词典中下一个单词所指向位置来做判断,这样就可以将原先浪费的存储空间利用起来。(如下图所示)
在这里插入图片描述
继续做出改进是:将连续词典进行分块,途中的例子是将每两个单词作为一个分块,在实际开发时,可动态调整分块大小,以获取最优压缩效果。(如图所示)
在这里插入图片描述

倒排列表压缩算法

单词对应的倒排列表一般记载3类消息:ID,TF,以及单词位置序列信息。因为ID是递增的,所以一般存储其差值,而非原始数据。


  • 评价压缩算法的指标
  1. 压缩率:数据压缩前后大小的比例关系
  2. 压缩速度
  3. 解压速度(最重要)

  • 一元编码与二进制编码

这两个算法是所有倒排列表压缩算法的基本构成元素,不论压缩算法内部逻辑思路是怎样的,最终都要以这两种格式来对数据进行表示。

一元编码:对于整数X来说,使用X-1个二进制书1和末位一个数字0来表示这个整数。当然一元编码只适合表示小数字。
在这里插入图片描述
二进制表示:
在这里插入图片描述

在此基础上的算法暂时省略。

文档编号重排序

在建立索引的时候,要对每个网页赋予唯一的文档编号。文档重新排序不是随机赋予文档一个ID,而是使得到排列表中相邻的两个文档编号也尽可能相邻,这样使得D-Gap尽可能小。
所以为了达到这个目的,越相似的网站其文档编号越相邻。
在这里插入图片描述
通过聚类,重排序:
在这里插入图片描述
但面对海量数据,文本聚类的速度很难满足实际的要求。所以有一种启发式的规则:将页面URL相似的网页聚合在一起,这主要考虑到同一个网站的很多页面表达的主题内容是近似的,通过这种方式可以非常高校的将网页聚合在一起。
在这里插入图片描述

静态索引裁剪

前面的压缩算法都是无损压缩,即压缩后数据信息没有任何损失。静态索引剪裁则是有损压缩,通过主动抛弃一些不重要的信息来达到更好的数据压缩效果。

对于用户查询来说,搜索往往只返回相关性最高的K个网页,所以可以将那些不重要的索引项从倒排索引中清除掉。

静态剪裁有两种思路:

  1. 以单词为中心的剪裁
  2. 以文档为中心的剪裁

  • 以单词为中心的剪裁

以查询”搜索引擎“这个单词为例:
在这里插入图片描述
通过函数g()来计算出每个文档相应的得分。
一个直观的裁剪方法是:得分低于某个阈值即清除该索引项。如图,如果要清除低于0.3分的文档,那么ID3和ID7都会被清除掉。

但有时候,这种按阈值裁定的方法可能会把所有索引项都清除掉,所以有时候我们需要保留至少K个。


  • 以文档为中心的裁剪

尽管一片文章有很多单词,但是只有一部分单词为文章服务,另一部分是无关紧要的。我们可以判断单词的重要性得分,进行裁剪。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这就是搜索引擎——索引压缩 的相关文章

  • MySQL——模糊查询(LIKE关键字与通配符:百分号%和下划线_的使用和理解)——(运用场景+通俗易懂)

    使用mysql模糊查询主要点 LIKE关键字和这两个通配符配合使用 任意一个字符 任意0或多个字符 那么我们立即上手吧 一 使用LIKE和通配符 场景1 我要搜索一个名字 可我都忘记叫什么了 只知道是3个字符的 那怎么搜索呢 三个下划线 代
  • es查询列表如何去重?

    SearchSourceBuilder builder new SearchSourceBuilder builder collapse new CollapseBuilder name keyword 在Elasticsearch中 bu
  • 能把百度玩出花样的人肯定不简单,分享几个鲜为人知的搜索引擎高级语法

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 专栏简介 此文章已录入专栏 网络安全快速入门 渗透过程中 通常会使用搜索引擎来收集重要信息 确定攻击点 Google 黑客语法
  • 【ES】Elasticsearch 简介

    大数据开发经常用到 Elasticesearch 今天做一下介绍 1 Elasticsearch 简介 Elaticsearch 简称为 ES 是一个开源的高扩展的分布式全文检索引擎 特点 近乎实时的存储 检索数据 扩展性好 可以扩展到上百
  • ES分布式搜索引擎

    初始化RestClient 引入依赖 因为SpringBoot默认的ES版本是7 6 2 所以我们需要覆盖默认的ES版本
  • ElasticSearch的查询权重-控制查询相关度

    ES查询相关度的官网连接 1 ElasticSearch的查询权重 每个文档与查询的相关度 在全文搜索引擎中不仅需要找到匹配的文档 还需根据它们相关度的高低进行排序 根据全文相关的公式或 相似算法 similarity algorithms
  • SpringCloud系列(十六)[分布式搜索引擎篇] - DSL 查询及相关性算分的学习 (部分)

    在SpringCloud系列 十五 分布式搜索引擎篇 结合实际应用场景学习并使用 RestClient 客户端 API这篇文章中我们已经对 RestClient 有了初步的了解 并且已经将一些数据进行了存储 但是这并不是我们学习 Elast
  • MarkDown超级教程 Obsidian版_11.4

    date 2021 11 3 18 01 aliases Markdown教程 MD教程 tags Markdown 什么是 Markdown Markdown 是一款轻量级标记语言 不同于HTML Hypertext Markup Lan
  • 这就是搜索引擎——索引压缩

    对于海量数据 建立倒排索引往往需要较大的磁盘空间 尤其是一些常见的单词 这些单词对应的倒排列表可能有几百兆 如果搜索引擎在相应用户查询的时候 用户查询包含了常见的单词 就需要将大量的倒排列表信息从磁盘读入内存 由于磁盘读写速度往往是个瓶颈
  • Elasticsearch使用教程

    下载ES elasticsearch的下载地址 https www elastic co cn downloads elasticsearch ik分词器的下载地址 https github com medcl elasticsearch
  • ElasticSearch(一)

    分布式搜索引擎01 1 初识elasticsearch 1 1 了解ES 想象下 假设 JD上有上千万商品 现在要求你 说出 包含 手机 的商品有哪些 并说出商品ID 商品图片地址 商品价格 商品的名称 也就是说实现JD的搜索的功能你怎么办
  • 地图兴趣点搜索三(ES相关性得分参数调整)

    1 问题回顾 前面第一章 我们介绍了地图兴趣点检索的基本流程 以及如何用elasticsearch ik搭建一个简单的demo 在运行demo时我们用 通州区万达广场 去搜索 结果排第一位的结果竟然是位于朝阳区的 建国路万达广场 第二章 我
  • chatgpt赋能python:Python如何优化中文SEO

    Python如何优化中文SEO Python 作为一种流行的编程语言 可以用来开发各种不同的应用程序 当涉及到网络营销和搜索引擎优化 SEO 时 Python的功能也非常有用 在本篇文章中 我们将介绍如何使用Python来优化中文SEO 以
  • chatgpt赋能Python-python_3__3

    Python 3 3 深入探讨Python中的相等运算符 在Python中 我们经常需要比较两个值是否相等 而Python的相等运算符 是用来判断两个值是否相等 在这篇文章中 我们将深入探讨Python中的 运算符 两个等号的作用 在Pyt
  • SpringBoot2.2.X整合ElasricSearch7.8

    这里默认大家已经掌握es基础语法 es版本为7 8 pom
  • ElasticSearch基础(7.0+版本)

    一 ElasticSearch的用法 ES是基于Lucene开发的分布式高性能全文检索系统 支持分布式存储 水平扩展 主要能力是 存储 搜索 分析 我目前接触过的主要有两种用法 作为二级索引提高查询效率和基于关键词的全文检索 Lucene
  • 《时代》评出100位AI领域最具影响力人物,黄仁勋、马斯克、萨姆·奥特曼在列...

    编辑 腾讯科技 郝博阳 郭晓静 翻译 金鹿 在过去的一个世纪里 时代 杂志的封面反映了塑造社会的力量 今年也是如此 生成式人工智能 Generative AI 无疑是今年最受关注的重塑社会的力量 我现在看到的创新水平比我一生中见过的要强几个
  • 系列教程

    PDF Search 系列教程来咯 在 Part 1 中 我们将演示如何从 PDF 中提取 处理并存储图像及文本 随着神经搜索 Neural Search 技术的普及 越来越多开发者 开始尝试用 Jina 解决非结构化数据的索引和搜索问题
  • 常用搜索引擎使用技巧

    1 指定站内搜索 使用site指定在某网站内搜索 如只在知乎中搜索 liuwons liuwons site zhihu com 2 精确匹配 使用双引号来指定精确匹配单词或短语 如精确搜索 liuwons liuwons 3 模糊搜索 使
  • 利用Apache Tika分页解析pdf文件内容

    Apache Tika 实现pdf文档分页提取内容 Apache Tika是一个多功能的文档内容提取工具 可以提取多种类型的文档内容 常用的如pdf office等格式 网上的例子基本上都是提取整篇文档内容 实际上用Tika提取pdf等文档

随机推荐

  • MySQL系列---事务与锁详解

    table of contents 1 背景 2 事务隔离级别 2 1 事务及其ACID属性 2 2 并发事务带来的问题 2 3 数据库事务隔离级别 3 锁机制 3 1 定义 3 2 分类 3 2 1 性能上划分 悲观乐观 3 2 2 从对
  • 解决微信小程序button的hover-class不生效问题

    在小程序开发过程中我们会遇到button添加style样式后即使添加hover class样式也没有点击效果的问题 产生该问题的原因为 在css中 内联样式style的优先级要高于class选择器的优先级 所以在我们添加style标签后即使
  • RabbitMq 报 An unexpected connection driver error occured和socket close异常处理

    进入rabbitMQ后台 1 后台地址为http localhost 15672 如果state状态为无法访问 那么我们就需要把这个链接给关掉 2 点击地址 找到close this connection 选择force close强制关闭
  • Centos7配置静态IP

    Centos7配置服务器静态IP 1 使用 ip addr 查看当前网卡信息 通过执行结果我们可以看到我们使用的网卡名称为ens33 2 配置服务器静态IP vi etc sysconfig network scripts ifcfg en
  • STL list

    文章目录 一 list 类的模拟实现 list 是一个带头双向循环链表 可以存储任意类型 模板参数 T 表示存储元素的类型 Alloc 是空间配置器 一般不用传 一 list 类的模拟实现 iterator 和 const iterator
  • 傅里叶图像相关性匹配-《医学图像处理》小作业五-Python代码/Matlab代码

    天津中医药大学 20级医学信息工程 教师 王翌 学生 邓集亲 学长我是用的python写的 matlab同样可以参考 实验五 相关性匹配 作业要求 参考 傅里叶变换 课的内容 采用快速傅里叶变换 FFT 进行相关性匹配 如下图示例输出结果图
  • 数据结构(第2版)陈越主编课后习题_【课后习题答案】离散数学(第2版)—课后习题答案...

    资 源 介 绍 本次分享内容为课程课后习题答案 教材名称 离散数学 第2版 主编作者 屈婉玲 耿素云 张立昂 出版社 高等教育出版社 ISBN 9787040419085 课后习题答案 01 习题一 02 习题二 03 习题三 04 习题四
  • java.io.IOException: Connection reset by peer

    接口要是返回的是字节 1 首先查看本地调用是否能正常返回 2 其次判断同样的参数测试环境是否正常返回 3 本地要是正常 测试环境异常的话 很大可能就是http协议版本不一致导致 解决办法 在nginx conf的location里加上 pr
  • Angular4基础开发文档

    Angular4基础开发文档
  • netstat命令详解

    命令介绍 netstat命令用于显示与IP TCP UDP和ICMP协议相关的统计数据 一般用于检验本机各端口的网络连接情况 netstat是在内核中访问网络及相关信息的程序 它能提供TCP连接 TCP和UDP监听 进程内存管理的相关报告
  • java/php/net/pythonMES生产线控制系统设计

    本系统带文档lw万字以上 答辩PPT 查重 如果这个题目不合适 可以去我上传的资源里面找题目 找不到的话 评论留下题目 或者站内私信我 有时间看到机会给您发 生产线控制系统 的设计主要是为了满足生产线管理员的实际需求 因此 它需要通过Int
  • 移动应用开发期末总结

    移动应用开发 什么是intent 问答题 Intent是一个动作的完整描述 包含了动作的产生组件 接收组件和传递的数据信息 Intent为Activity Service和BroadcastReceiver等组件提供交互能力 将一个组件的数
  • 使用Modelarts快速开发Hilens Kit实现人脸识别功能

    导语 在华为云平台上线的Modelarts模型训练平台结合华为智能终端产品Hilens kit 对Hilens Kit进行开发 实现产品的快速使用以及功能的实现 自从2020年疫情开始 使得人与人的接触变得更加不方便 间接促使了人工智能产业
  • Java中9种常见的CMS GC问题分析与解决

    目前 互联网上 Java 的 GC 资料要么是主要讲解理论 要么就是针对单一场景的 GC 问题进行了剖析 对整个体系总结的资料少之又少 前车之鉴 后事之师 美团的几位工程师历时一年多的时间 搜集了内部各种 GC 问题的分析文章 并结合个人的
  • unity开发小贴士之三 UGUI-Lua Component回收

    ugui tolua local test test b gameobjecttest c gameobject GetComponent typeof UnityEngine UI Button 首先调用UnityEngine GameO
  • Java Logging

    最后一次实验要求用日志来记录信息 学习的内容整理如下 Java 中的 Logging API 让 Java 应用可以记录不同级别的信息 它在debug过程中非常有用 如果系统因为各种各样的原因而崩溃 崩溃原因可以在日志中清晰地追溯 日志工作
  • 在小程序中使用图标

    因为最近在自学微信小程序 掌握了他的基础的使用 包括小程序的语法 小程序的自有组件 小程序的自有API及小程序的自定义组件 在学玩以上的各方面的知识体系后 我就想着学了这么就的微信小程序 自己总要写出点什么东西来才对的起自己这段时间来的努力
  • Android退出应用程序方法总结

    Android退出应用程序方法总结 在Android开发中 我们运行了应用程序后 都需要退出应用的 那么该如何退出应用 又都有哪些实现方式呢 今天就为大家整理分享一些退出应用程序的方法 一起来看看吧 更新内容 Ver v1 任务管理器方法补
  • 简短的char*与char[]

    include
  • 这就是搜索引擎——索引压缩

    对于海量数据 建立倒排索引往往需要较大的磁盘空间 尤其是一些常见的单词 这些单词对应的倒排列表可能有几百兆 如果搜索引擎在相应用户查询的时候 用户查询包含了常见的单词 就需要将大量的倒排列表信息从磁盘读入内存 由于磁盘读写速度往往是个瓶颈