首页 > 其他分享 >Elasticsearch搜索功能的实现(一)--搜索引擎为什么选ES

Elasticsearch搜索功能的实现(一)--搜索引擎为什么选ES

时间:2023-04-18 22:55:41浏览次数:35  
标签:文件 -- ...... 关键词 索引 文档 Elasticsearch ID ES

一、应用场景

Elasticsearch 具有广泛的应用场景,包括全文搜索、日志分析、运维监控、安全分析等。

Elasticsearch 是开源的实时分布式搜索分析引擎,内部使用 Lucene 做索引与搜索。适用场景包含信息检索、舆情分析、推荐系统、广告系统等多种对综合检索&召回有需求的场景。

image

二、为什么 Elasticsearch倒排索引快

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

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

1、正向索引

正向索引(正排索引):正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。

“文档1”的ID > 关键词1:出现次数,出现位置列表;关键词2:出现次数,出现位置列表;…………。

“文档2”的ID > 此文档出现的关键词列表。

文档ID 内容所切分出的关键词
文档1 关键词1、关键词2、关键词5、关键词11......关键词L
文档2 关键词3、关键词5、关键词7......关键词M
文档3 关键词2、关键词4、关键词8......关键词N
文档4 关键词61、关键词9、关键词10......关键词O
...... ......
文档n 关键词9、关键词15、关键词21......关键词P

优点:易于维护:新增的话直接跟在原来的后面,删除的话直接删除某一条即可

缺点:查询时间长,检索效率低下

例如:当用户搜索关键词的时候,比如用户搜索关键词5,会按照id顺序依次找到有关键词5的页面,服务器还需要对所有索引的页面进行检索,消耗的资源非常大。
如果用户搜索的是长尾词,比如说“关键词2+关键词5”,这种相关性的计算资源消耗就更大了,耗时也更长!

2、倒排索引

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

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

倒排索引的结构如下:

“关键词1”:“文档1”的ID,“文档2”的ID,…………。

“关键词2”:带有此关键词的文档ID列表。

关键词 文档
关键词1 文件1、文件2、文件5、文件11......文件L
关键词2 文件3、文件5、文件7......文件M
关键词3 文件2、文件4、文件8......文件N
关键词4 文件61、文件9、文件10......文件O
...... ......
关键词n 文件9、文件15、文件21......文件P

优点:检索的快速响应是一个最为关键的性能

缺点:倒排表的建立和维护都较为复杂(索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率)

这样一来,当用户搜索关键词2+关键词5 的时候,搜索引擎只需要将包含关键词2且包含关键词5的文件调用出来,然后计算它们的相关度和权重。倒排索引的应用,大大加快了呈现排名的速度,减轻了服务器计算的压力。

倒排索引中,不仅会记录相应关键词文件的ID,还会记录关键词频次、关键词出现在文件中的位置、关键词对应的文档更新频率等信息,在排名的时候,这些信息会被进行加权处理。

标签:文件,--,......,关键词,索引,文档,Elasticsearch,ID,ES
From: https://www.cnblogs.com/gdwkong/p/17331540.html

相关文章

  • MAUI Blazor 实战:开发界面跟随系统主题切换的App
    ​1、安装MasaBlazor参考:MASABlazorhttps://blazor.masastack.com/getting-started/installation2、编写代码新建Service目录,并添加ThemeService.cs该 RequestedTheme 属性返回 AppTheme 枚举成员。 AppTheme 枚举定义下列成员:Unspecified,指示设备使用的是未指......
  • LeetCode Top 100: 二叉树的直径 (python)
     给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例:给定二叉树1/\23/\45返回 3,它的长度是路径[4,2,1,3]......
  • Arcgis中创建要素时绘制XY轴的矩形
    本章记录一个在绘制要素时能够平行于XY轴绘制一个“正矩形”的方法。1.在选定线段起始点后,将鼠标移动至需要的Y轴大概位置,右键,点击“增量X,Y”  2.设置X=0,Y增量不变,即得到平行于Y轴的矩形边 重复该操作即可得到矩形,也可以在第一步完成后按TAB唤出要素构造菜单,选择追踪-直......
  • 4月18日leetcode二叉树几种遍历方式的非递归和递归
    给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例1:二叉树的前序中序和后序遍历算法是学习二叉树必不可少的,若是使用c语言遍历前中后序还是比较繁琐的,因为要考虑遍历结果存放的序列大小问题,想要解决这个问题就得想用递归计算二叉树的节点数量,再调用递归子函数完......
  • day01-项目介绍&功能实现
    项目介绍&功能实现1.项目介绍&环境搭建一个以社交平台为核心的轻电商项目,功能如下:短信登录、商户查询缓存、优惠券秒杀、达人探店、好友关注、附近的商户、用户签到、UV统计1.1项目架构1.2项目环境搭建1.2.1后端项目搭建mysql的版本采用5.7及以上版本(1)首先创建数据库......
  • 【VRP问题】基于混合遗传算法求解车辆路径规划问题附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 如何计算 目标检测任务的 AP 以及 mAP 指标?
    AP50:50的的意思是IOU的阈值是0.5。先算AP,AP是针对某一类的,表示不同置信度下的PR值的平均,也就是通过不同置信度得到一条PR曲线,曲线下的面积就是AP。这里的置信度是模型输出的条件概率,即是该类的条件下的概率。比如对于persion这一类,模型经过NMS得到一些......
  • GraphPad Prism 9.5.1 for Mac 简单高效的实用性医学绘图分析工具
    GraphPadPrismGraphPadPrism是一款非常实用的统计软件,其功能非常强大,能够帮助用户进行各类科研数据的处理和分析,快速绘制出各种专业的图像和数据报告。GraphPadPrism软件的用户界面非常友好,易于学习和操作,具有多种语言版本,可以帮助全球各地的用户完成科研数据分析工作。该软......
  • 机器学习:XGBoost算法介绍
    动动发财的小手,点个赞吧!1.简介XGBoost(eXtremeGradientBoosting)是一种用于回归、分类和排序的机器学习算法。它是GBDT(GradientBoostingDecisionTrees)的一种高效实现,能够在大规模数据集上运行,并具有很强的泛化能力。XGBoost在2016年KDDCup竞赛中赢得了冠军,也被广泛应......
  • 0/1分数规划
    1.0/1分数规划模板例题:poj2976二分求解M,M即为答案#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>usingnamespacestd;structPair{ inta,b;doubley;}p[1005];boolcmp(Paira,Pairb){ returna.y......