ElasticSearch总结二

正向索引和倒排索引:

正向索引:

比方说我这里有一张数据库表,那我们知道对于数据库它一般情况下都会基于i d去创建一个索引,然后形成一个b+树。

那么你根据i d进行检索的速度,就会非常的快,那么这种方式的所以就是一个正向索引。但是如果我现在搜索的字段不是i d,而是一个普通的标题字段,标题字段一般它内容比较长,你不会给他加索引,对吧?

即便你给他加索引,那现在我想的不是确的标题值。我想其中的一部分:

搜索'手机"

select *from tb_goods where title like'%手机%'

这里你一旦使用了这样的模糊匹配,那么即便这个字段有索引,将来是不是也不生效了?那这种情况下没有索引,我们数据库该怎么去比较和查询?它就会采用逐条扫描的方式来判断每一行数据中是否包含手机。

判断以后,如果发现不包含,那就直接把它丢。如果包含,则把它放到我们的结果集当中。

逐行去扫描,最终一定能够拿到完整的结果集,没错吧。但是你想想看,如果你这张表有一千万的数据,那也就意味着你要扫描多少次了,是不是一千万次,那么它的性能可想而知是比较差的。

所以这是正向索引,它在做这种局部内容检索的时候,效率就比较差了。

倒排索引:

倒排索引,它在存储时,它会先先把文档中的内容分成词条去存。并且这些词条肯定会有大量的重复,没错吧?那因为中文的词语可能就那么多,但是我们不能重复记录,而是记录唯一的一个如果有重复词条出现在后边,记录文档i d即可

        这样可以确保倒排索引当中,词条字段这里是绝对不会出现重复的,保证它的唯一性,  因为它的唯一性,我们就可以给它创建索引了,你可以数据较少的时候使用哈希法,也可以使用b+数,去给词条创建唯一索引,那将来我们根据词条查找的速度是不是就非常的快了 

比方说现在我来搜索华为手机,那这个搜索的方式比刚才那个是不是还要复杂了,那么我们的倒排索引它会怎么做?它第一步:会对用户输入的这一段内容: “华为手机”做一个分词。

因为搜索的时候给你的是一句话,华为手机”,这不行,要分词。那会分出两个词语,一个是“华为”,一个是”手机“,没错吧?

下一步该干嘛了?下一步拿着这两个词条去倒排索引中进行一个查询:

 因为所有词条建立了索引,所以我根据这俩词条来查询的速度如何,是不是非常的快。

这个时候,我去一查,我就能够查到谁呀。华为这不是2、3吗?手机是不是1、2么,那我就能够得到两组文档id没错吧? 这个时候,我就可以通过文档id从而知道包含华为、手机的所有的文档了

其中的二号文档两个词都包含”华为“、”手机“这两个词儿。所以从关联度来讲,谁的关联度更高一点?是不是二号文档?那么将来我还给你排个序,二号我排在最前边,然后一和三再往后排。

那然后,我拿着这个三个id我就可以去查询文档了呀,是不是根据id建立了索引,那么拿着i d找,是不是快速的就能定位到文档了,最后把它放到我们的结果集当中就行了:

那么我们这个倒排索引的过程,同学们可以看到它其实经过了两次检索:

第一次是根据用户输入内容的词条去词条列表中进行一个寻找,找到对应的文档i d、

而第二次是拿着文档i d找具体文档 虽然是两次,但每一次他都经历了索引进行查询,所以总的查询效率是比刚才那种逐条扫描要高的多的多的。

倒排索引为什么叫倒排索引?

倒排索引为什么叫倒排索引?因为在正向索引当中,我要去找到包含”华为“、”手机“,我得一行一行的先看这条文档,找到这条文档了,看一下:你包含手机吗?,包含的话存入结果集、再看下一条包不包含这个词语、再看下一条包不包含这个词语.....  :是先找到文档,然后看文档是否符合我们的词条要求。

而倒排索引是反过来的,它是基于词条创建索引,然后去关联到文档:查找的时候,是先找词条,再根据词条找到对应的文档,是根据词条找文档。而正向是根据文档找的词条,是不是反过来的一个过程,所以叫倒排索引,就是这个原因。

      

我们主要是了解了一下正向索引和倒排索引, 了解了两个概念,一个是文档,一个是词条。

   什么是文档?文档其实就是我们的每一行数据,无论是商品也好,还是订单也好,用户也好,还是这个网页也好,这些都是文档,每一条数据就是一个文档。那词条就是对文档中的内容做分词,按照语义:中文就按照中文含义分,英文就按照空格分,分出来的这些词语就是词条了

什么是正向索引,正向索引其实就类似于数据库那种,基于id创建的索引。那他在检索的时候,如果你是搜索非索引字段,你必须得逐行扫描去进行检索,然后进行匹配,先找文档,那根据文档判断是否包含词条。

倒排索引是反过来一个过程。那它先相对内容分层得到词条,是给词条创建索引,然后记录词条所在的文档信息,查询的时候,是先根据词条找到文档i d,然后再根据id找到文档,是这么一个过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/568748.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cesium之加载GeoServer或geowebcache的WMTS服务

文章目录 Cesium加载GeoServer的WMTS关键代码WMTS服务地址获取核心参数获取 Cesium加载GeoServer的WMTS关键代码 Cesium之加载GeoServer或geowebcache的WMTS服务关键代码如下 var url2"http://localhost:8090/geowebcache/service/wmts/rest/arcgis_com/{style}/{TileMat…

在excel中,如何在一个表中删除和另一个表中相同的数据?

现在有A表,是活动全部人员的姓名和学号,B表是该活动中获得优秀人员的姓名和学号, 怎么提取没有获得优秀人员的名单? 这里提供两个使用excel基础功能的操作方法。 1.条件格式自动筛选 1.1按住Ctrl键,选中全表中的姓…

的记忆:pandas(实在会忘记,就看作是一个 Excel 表格,或者是 SQL 表,或者是字典的字典。)

pandas 是一个开源的 Python 数据分析库,它提供了快速、灵活和富有表现力的数据结构,旨在使“关系”或“标记”数据的“快速分析、清洗和转换”变得既简单又直观。pandas 非常适合于数据清洗和转换、数据分析和建模等任务。以下是 pandas 的基本概念和主…

用 LM Studio 1 分钟搭建可在本地运行大型语言模型平台替代 ChatGPT

📌 简介 LM Studio是一个允许用户在本地离线运行大型语言模型(LLMs)的平台,它提供了一种便捷的方式来使用和测试这些先进的机器学习模型,而无需依赖于互联网连接。以下是LM Studio的一些关键特性: 脱机&am…

C++笔记:C++中的重载

重载的概念 一.函数重载 代码演示例子&#xff1a; #include<iostream> using namespace std;//函数名相同&#xff0c;在是每个函数的参数不相同 void output(int x) {printf("output int : %d\n", x);return ; }void output(long long x) {printf("outp…

RTU遥测终端为城市排水安全保驾护航!

近年来&#xff0c;全球气候变迁与城市化进程不断加速&#xff0c;导致强降雨事件频发&#xff0c;道路低洼地带、下穿式立交桥和隧道等区域在暴雨中常易积水&#xff0c;严重阻碍了人民的出行&#xff0c;甚至危及生命与财产安全。而传统的排水管网管理方式已难以适应现代城市…

mybatis的使用技巧8——联合查询union和union all的区别和用法

在实际项目开发中&#xff0c;会经常联合查询结构相似的多张数据表&#xff0c;使用union关键字就只需要一次sql操作&#xff0c;而无需执行多次查询并通过代码逻辑合并处理&#xff0c;减少了大量繁琐的操作&#xff0c;最重要的是还能通过可选的all关键字筛选重复的数据。 1…

数据结构基础:链表操作入门

数据结构基础&#xff1a;链表操作入门 数据结构基础&#xff1a;链表操作入门链表的基本概念链表的基本操作输出链表插入节点删除节点查找值 完整的链表操作示例结语 数据结构基础&#xff1a;链表操作入门 在计算机科学中&#xff0c;数据结构是组织和存储数据的方式&#x…

海康Visionmaster-常见问题排查方法-启动失数

问题2&#xff1a;VM无法启动&#xff0c;报错&#xff1a;参数错误&#xff1b;  问题原因&#xff1a;客户电脑环境异常导致代理启动失败。  解决方法&#xff1a;安装运行时库&#xff0c;并测试代理能否正常启动,步骤如下&#xff1a; ① 尝试双击代理进程&#xff…

WPF 6 命令

命令 创建一个按钮&#xff0c;新建一个事件&#xff0c;按住F12 就可以添加业务代码 运行代码 此时希望UI与后台代码分离&#xff0c;互不影响 此时新建一个MainViewModel类&#xff0c;来保存业务代码 Icommand 是所有command的父类接口 新建一个command来实现这个接口…

OceanBase诊断调优 】—— 如何快速定位SQL问题

作者简介&#xff1a; 花名&#xff1a;洪波&#xff0c;OceanBase 数据库解决方案架构师&#xff0c;目前负责 OceanBase 数据库在各大型互联网公司及企事业单位的落地与技术指导&#xff0c;曾就职于互联网大厂和金融科技公司&#xff0c;主导过多项数据库升级、迁移、国产化…

蓝桥杯:日期问题(我的绝望题)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;每日一练 &#x1f337;追光的人&#xff0c;终会万丈光芒 目录 前言&#xff1a; &#x1f337;1.问题描述&#xff1a; 1.问题描述&#xff1a; 2.输入格式&#xff1a; 3.输出格式&#…

HarmonyOS开发案例:【相机开发】

基本概念 相机是OpenHarmony多媒体进程提供的服务之一&#xff0c;提供了相机的录像、预览、拍照功能&#xff0c;支持多用户并发取流。 在进行应用的开发前&#xff0c;开发者应了解以下基本概念&#xff1a; 视频帧 视频流指的是将一系列图片数据按照固定时间间隔排列形成的…

探索设计模式的魅力:主从模式与AI大模型的结合-开启机器学习新纪元

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索主从模式与AI大模型之旅✨ &#x1f31f;Hey, tech enthusiasts! 你是否还在追…

AI论文速读 |2024[TPAMI]【综述】自监督学习在时间序列分析的分类、进展与展望

题目&#xff1a; Self-Supervised Learning for Time Series Analysis: Taxonomy, Progress, and Prospects 作者&#xff1a;Kexin Zhang, Qingsong Wen(文青松), Chaoli Zhang, Rongyao Cai, Ming Jin(金明), Yong Liu(刘勇), James Zhang, Yuxuan Liang(梁宇轩), Guansong…

运维 kubernetes(k8s)基础学习

一、容器相关 1、发展历程&#xff1a;主机–虚拟机–容器 主机类似别墅的概念&#xff0c;一个地基上盖的房子只属于一个人家&#xff0c;很多房子会空出来&#xff0c;资源比较空闲浪费。 虚拟机类似楼房&#xff0c;一个地基上盖的楼房住着很多人家&#xff0c;相对主机模式…

【python程序打包教程】PyInstaller一键打包Python程序为独立可执行exe文件

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

springboot论文格式系统

采用springbootmysqlhtmlvue技术 详细运行视频地址B站运行效果视频地址 &#xff08;1&#xff09;系统具备用户管理功能&#xff0c;包括用户注册、登录、权限管理等功能。 &#xff08;2&#xff09;系统具备格式规范管理功能&#xff0c;包括格式规范创建、编辑、删除等操…

Unity系统学习笔记

文章目录 1.基础组件的认识1.0.组件继承关系图1.1.项目工程文件结构&#xff0c;各个文件夹都是做什么的&#xff1f;1.2.物体变化组件1.2.3.三维向量表示方向1.2.4.移动物体位置附录&#xff1a;使用变换组件实现物体WASD移动 1.3.游戏物体和组件的显示和禁用1.3.1.界面上的操…

面试八股——RabbitMQ

消息丢失问题 消息确认机制 生产者与MQ之间的消息确认&#xff1a; 当MQ成功接收消息后&#xff0c;会返回给生产者一个确认消息。如果在规定时间内生产者未收到确认消息&#xff0c;则任务消息发送失败。 MQ与消费者之间的消息确认&#xff1a; 当MQ成功接收消息后&#…