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找到文档,是这么一个过程。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧水生态系统的架构设计与优化:内蒙古硕达智水百数低代码平台的实践

随着业务的不断扩展,传统的项目管理方式已无法满足现代水生态项目的需求。为提高项目管理和决策效率,内蒙古硕达智水生态科技决定引入百数作为其数字化转型的合作伙伴。 内蒙古硕达智水生态科技有限公司: 内蒙古硕达智水生态科技有限公司&a…

用于割草机器人,商用服务型机器人的陀螺仪

介绍一款EPSON推出适用于割草机器人,商用服务型机器人的高精度陀螺仪模组GGPM61,具体型号为GGPM61-C01。模组GGPM61是一款基于QMEMS传感器的低成本航向角输出的传感器模组,它可以输出加速度、角速度及姿态角等信息,为控制机器人运…

人工智能基础-Python之Pandas库教程

文章目录 前言一、Pandas是什么?二、使用步骤1.引入库2.数据读取2.1 数据类型2.2 数据读取1.常见操作2.txt读取 3.pandas的数据结构3.1 Series1.属性2.创建Series3.查询 3.2 DataFrame1.创建DataFrame 4.查询数据4.1 data.loc 根据行列标签值进行查询1.使用单个labe…

ASP.NET Core 3 高级编程(第8版) 学习笔记 04

第 19 章主要介绍 Restful Service 的相关知识。Restful Service 的核心内容是:(1)HTTP 请求或 HTTP 动词,用 HTTP 请求表达不同的操作,最好遵守惯例。(2)资源,通过 PATH 结合 paylo…

stm32f4单片机强制类型转换为float程序跑飞问题

如题,在一个数据解析函数中使用了*(float *)&data[offset],其中data为uint8类型指针,指向的value地址为 可以看到地址0x20013A31非对齐,最终在执行VLDR指令时导致跑飞 VLDR需要使用对齐访问 跑飞后查看SCB寄存器发现确实是非…

【网络安全】在网络中如何对报文和发送实体进行鉴别?

目录 1、报文鉴别 (1)使用数字签名进行鉴别 (2)密码散列函数 (3)报文鉴别码 2、实体鉴别 鉴别(authentication) 是网络安全中一个很重要的问题。 一是要鉴别发信者,即验证通信的对方的确是…

微博评论爬取

import requests import csv# 打开CSV文件以写入数据 f open(data.csv, modea, encodingutf-8-sig, newline) csv_writer csv.DictWriter(f, fieldnames[昵称, 性别, 归属地, 内容]) csv_writer.writeheader()# 定义一个函数用于获取评论内容 def GetContent(max_id):# 设置请…

【Harmony3.1/4.0】笔记五

概念 本文综合row,column作为主要布局,结合image组件,text组件,textimput组件,button组件以及轮播布局搭建登录页面 效果图 ArkTS代码 //登录综合页面 Entry Component struct Five{//添加图片State imgs:Resource[…

企业有哪些常见网络需求场景?

企业的网络场景需求多种多样,主要取决于其业务规模、运营模式、技术应用等因素。 常见的企业网络场景需求 办公网络需求: 高速稳定的内部网络连接,以支持员工日常办公、数据传输和资源共享。 无线办公网络覆盖,以便员工在会议室…

【LeetCode刷题记录】19. 删除链表的倒数第 N 个结点

19 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head [1], n 1 输出…

大模型的实践应用22-谷歌Gemma AI大模型的架构原理,以及Gemma模型的部署安装本地教程

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用22-谷歌Gemma AI大模型的架构原理,以及Gemma模型的部署安装本地教程。谷歌Gemma AI大模型是由Google AI团队开发并开源。Gemma模型采用Transformer编码器-解码器架构,并加入了一些改进,例如使用稀疏注意力机制来提高推…

世媒讯提供海内外媒体宣发服务,引领企业新媒体发展之路

在这个信息化的时代,软文发稿已经成为企业发展不可或缺的重要工具。随着社会的快速发展,消费者需要更多定制化、个性化的信息。利用软性推广,凭借其细致入微的信息传递,可以迅速抓住消费者的注意力,从而进一步推动企业…

“五之链”第十六期沙龙活动在呆马科技成功举办

2024年4月19日,由临沂呆码区块链网络科技有限公司(呆马科技)承办的第十六期“五之链”物流主题沙龙活动成功举办。此次活动邀请了政府相关部门、知名科研院所、物流企业等20余家单位参与,共同探讨物流数据要素流通与智能应用的发展…

使用prompt_toolkit构建交互式命令行工具

prompt_toolkit是一个python库,用于构建命令行工具和终端应用。其官网介绍如下, prompt_toolkit is a library for building powerful interactive command line and terminal applications in Python. 安装命令如下, pip install prompt_to…

朴素贝叶斯算法分类

def loadDataSet():postingList[[my, dog, has, flea, problems, help, please], #切分的词条[maybe, not, take, him, to, dog, park, stupid],[my, dalmation, is, so, cute, I, love, him],[stop, posting, stupid, worthless, garbage],[mr, licks, ate, my, steak, …

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

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

2024新算法爱情进化算法(LEA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验

简介: 2024新算法爱情进化算法(LEA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验。 无人机三维路径规划的重要意义在于确保飞行安全、优化飞行路线以节省时间和能源消耗,并使无人机能够适应复杂环…

Leetcode 第 393 场周赛题解

Leetcode 第 393 场周赛题解 Leetcode 第 393 场周赛题解题目1:3114. 替换字符可以得到的最晚时间思路代码复杂度分析 题目2:3115. 质数的最大距离思路代码复杂度分析 题目3:3116. 单面值组合的第 K 小金额思路代码复杂度分析 题目4&#xff…

使用BibTeX导入参考文献到Overleaf项目(常用方法)

使用bib为overleaf导入参考文献的好处 整洁的管理: 使用 .bib 文件可以使你的参考文献管理更加整洁和有条理。你可以将所有的参考文献集中存储在一个文件中,而不是在文档中直接引用或复制粘贴。 易于维护和更新: 当你需要添加、删除或修改参考…

申请泛域名证书步骤

泛域名证书的广泛应用范围: 泛域名证书不同于普通的单域名数字证书和多域名数字证书,可以一次以一张证书对应无限多的域名,在功能性和方便性上远优于一般证书。 单域名证书顾名思义,一张证书只对应一个独立域名,多域…