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

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(使用前将#替换为@)

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

  • NewBing、Andi、Phind、Perplexity 还有国产kuaisou五个AI搜索引擎的介绍和对比

    NewBing NewBing是微软推出的新一代AI搜索引擎 它基于OpenAI的下一代大语言模型 比ChatGPT更强大 专门为搜索定制 NewBing可以理解自然语言的问题 生成简洁 准确 有趣的回答 并提供相关的链接和图片 NewBi
  • 搜索引擎算法系列-BloomFilter算法解析及扩展算法

    通常存在下面的一些存在性检查方法 1 使用Set
  • Elasticsearch 查询和聚合查询:基本语法和统计数量

    摘要 Elasticsearch是一个强大的分布式搜索和分析引擎 提供了丰富的查询和聚合功能 本文将介绍Elasticsearch的基本查询语法 包括预发查询和聚合查询 以及如何使用聚合功能统计数量 引言 Elasticsearch是一种开
  • Elasticsearch使用教程

    下载ES elasticsearch的下载地址 https www elastic co cn downloads elasticsearch ik分词器的下载地址 https github com medcl elasticsearch
  • 使用Chrome浏览器的搜索引擎,谷歌浏览器开启同步功能

    试了很多方法使用谷歌的搜索和登录 结果都是页面加载失败 最后还是找到了一个插件 极简插件 https chrome zzzmh cn extension 右上角搜索 chrome同步助手 点击推荐下载 chrome 打开chrome 点击右
  • ES搜索引擎之ES介绍,安装以及辅助插件Kibana的安装

    文章目录 ES搜索引擎之ES介绍 安装以及辅助插件Kibana的安装 ElasticSearch介绍 1 1为什么会有ElasticSearch搜索引擎 1 2ES的介绍 1 3什么是倒排索引 ElasticSearch的安装 下载elas
  • Elasticsearch 设置用户名密码认证(亲测)

    文章目录 第一步 在 elasticsearch yml 中添加如下配置 第二步 重启elasticsearch服务 第三步 设置elasticsearch密码 第四步 验证 修改密码 如果密码忘了怎么办 如何重置密码 1 修改elasti
  • Es中索引的删除操作

    package com atguigu es test import org apache http HttpHost import org elasticsearch action admin indices delete DeleteI
  • MySQL8高级优化,持续更新......

    索引 索引可以高效获取数据 避免对数据进行全盘扫描 查询速度很慢 索引就是一种数据结构 树 MySQL官方对索引的定义为 索引 index 是帮助MySQL高效获取数据的数据结构 有序 在数据之外 数据库系统还维护者满足特定查找算法的数据结
  • 【ES小结】还在用ElasticSearch做查询?换条思路实现高效数据统计

    博客首页 派 大 星 欢迎关注 点赞 收藏 留言 本文由派大星原创编撰 系列专栏 ES小结 本系列记录ElasticSearch技术学习历程以及问题解决 ElasticSearch高效数据统计 聚合查询 什么是聚合查询 Kibana 命令测
  • 【搜索引擎Solr】Apache Solr 神经搜索

    Sease 1 与 Alessandro Benedetti Apache Lucene Solr PMC 成员和提交者 和 Elia Porciani Sease 研发软件工程师 共同为开源社区贡献了 Apache Solr 中神经搜索的
  • 解决Elasticsearch查询默认最大值返回10000

    文章目录 1 问题描述 1 描述 2 分析 2 解决方案 1 更改当前索引最大查询条数 max result window 2 能查出数据 但是total依然还是1000 更改track total hits 3 当java使用时应该 4
  • ElasticSearch--Field的使用

    目录 一 Field的介绍 二 Field的属性介绍 三 常用的Field类型 一 text文本字段 二 keyword关键字字段 三 date日期类型 四 Numeric类型 四 Field属性的设置标准 一 Field的介绍 上周的一篇
  • Ubuntu安装可视化界面ElasticSearch-head插件

    1 下载地址 GitHub mobz elasticsearch head A web front end for an elastic search cluster 上传并解压 root zq virtual machine home e
  • ElasticSearch

    ElasticSearch 一 ES介绍 ES是一款基于倒排索引的NoSQL数据库 传统数据库对于模糊查询存在性能瓶颈 而ES更擅长与大数据量的模糊查询 ES在存储数据的时候会先将数据进行分词 将分词的结果作为索引存入数据库中 当进行查询时
  • Jina 2.0 快速入门指"北"

    What Why 选择Jina的4大理由 支持所有数据类型 大规模索引和查询任何类型的非结构化数据 视频 图像 长文本 语音 源代码 PDF等 速度极快 云原生 从第一天开始 Jina就是分布式架构 具有可扩展和云原生的设计 支持容器 并行
  • ChatGPT发布一年后,搜索引擎的日子还好吗?

    导读 生成式AI 搜索引擎的终结者还是进化加速器 ChatGPT发布刚刚一年 互联网世界已经换了人间 2023年 以ChatGPT和大模型为代表的生成式AI浪潮对全球互联网 云计算 人工智能领域都带来巨大冲击 而且生成式AI在各行各业的应用
  • Elasticsearch-Kibana使用教程

    1 索引操作 1 1创建索引 PUT employee settings index refresh interval 1s number of shards 1 max result window 10000 number of repl
  • Elasticsearch安装

    1 什么是ELK ELK是Elasticsearch Logstash Kibana三大开源框架首字母大写简称 市面上也被成为Elastic Stack 1 Elasticsearch 负责日志的检索和存储 2 Logstash 负责日志的
  • ESM10A 消除对单独 PLC 的需求

    ESM10A 消除对单独 PLC 的需求 ESM10A 可以消除对单独 PLC 的需求 该程序是在 PC 上开发的 然后使用免费提供的简单易用的 EzSQ 软件下载到逆变器 似乎这些改进还不够 日立还在 SJ700 中添加了其他新功能 例如

随机推荐

  • 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
  • 这就是搜索引擎——索引压缩

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