详细描述一下Elasticsearch搜索的过程?
大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch搜索的过程?】面试题。希望对大家有帮助;
详细描述一下Elasticsearch搜索的过程?
Elasticsearch 的搜索过程是其核心功能之一,允许用户对存储在 Elasticsearch 中的文档进行快速高效的查询。搜索过程涉及多个阶段,从接收查询请求到返回搜索结果,每个阶段都经过精细的设计,以实现高性能和高效的查询。下面将详细描述 Elasticsearch 搜索的各个步骤。
1. 接收查询请求
- 用户发起搜索请求,通常是通过 HTTP 协议发送的 RESTful 请求。查询请求可以是一个简单的匹配查询,也可以是复杂的多条件查询。
- 查询请求一般如下:
上述请求表示在GET /my_index/_search {"query": {"match": {"title": "Elasticsearch Basics"}} }
my_index
索引中查找title
字段中包含 "Elasticsearch Basics" 的文档。
2. 路由和分片选择
- 与索引文档时类似,Elasticsearch 需要确定查询请求将要作用的具体分片。这个过程由路由机制完成。
- Elasticsearch 默认使用文档的
_id
字段通过哈希算法来路由查询到具体的分片。但在查询时,通常是基于索引和查询内容来选择分片。 - 如果查询是跨多个分片的,Elasticsearch 会决定哪些分片需要参与查询。例如,如果你查询一个索引中的所有文档,所有的分片都会参与查询。
3. 选择搜索的分片
- 如果请求没有指定特定的分片,Elasticsearch 会选择所有相关的分片。每个索引都有多个分片,分片分布在不同的节点上。
- 搜索请求会被发送到所有包含该索引的分片。每个分片会在本地执行搜索。
4. 分片级查询(Shard-Level Search)
-
每个参与查询的分片都会单独处理查询请求。Elasticsearch 中每个分片都是一个独立的 Lucene 索引,因此搜索过程在每个分片内部是独立进行的。
-
在分片级别,Elasticsearch 会执行以下操作:
- 解析查询:首先,Elasticsearch 会解析查询请求,决定使用何种查询类型,如
match
、term
、range
等。 - 分析查询:如果查询中包含文本字段(如
match
查询),则会使用与索引时相同的分析器对查询进行分析,将查询文本分解为一组词条。 - 倒排索引查询:然后,查询通过倒排索引(Inverted Index)来检索相关文档。倒排索引将每个词条映射到包含该词条的文档 ID 列表。
- 解析查询:首先,Elasticsearch 会解析查询请求,决定使用何种查询类型,如
-
分片级查询的过程通常是高效的,因为每个分片的搜索操作都在本地进行,避免了跨节点的数据传输。
5. 聚合与排序(如果有的话)
- 如果查询中包含了聚合(如
aggregations
)或者排序(sort
)要求,那么 Elasticsearch 会在分片级别先对结果进行排序和聚合。 - 对于聚合,Elasticsearch 会计算分片内部的聚合结果。例如,如果你使用
terms
聚合,它会按词条分组统计每个分片内出现的频次。 - 排序通常在分片内进行,但如果查询跨多个分片且涉及排序,Elasticsearch 需要在所有分片的搜索结果返回后进行排序合并。
6. 从分片返回文档结果
- 每个分片完成查询后,都会返回一组相关文档的结果,以及相关的排序和聚合数据。
- 返回的数据通常包括文档的
_id
、得分(score)、字段值、以及可能的聚合结果。 - 返回的文档中,可能还包含
_source
字段,它表示文档的原始 JSON 数据。
7. 跨分片聚合与合并
- 如果查询跨多个分片,Elasticsearch 会在所有分片完成查询后合并这些结果:
- 聚合合并:如果查询中包含聚合操作,Elasticsearch 会在各个分片级别计算局部聚合结果,然后将它们合并成全局聚合结果。
- 排序合并:对于带排序的查询,Elasticsearch 会对所有分片的查询结果进行合并,选择前 N 个相关的文档,然后返回给用户。
- 去重:在某些情况下,Elasticsearch 会去除重复的文档,确保每个文档只出现一次。
8. 计算相关性得分(Relevance Score)
- Elasticsearch 会为每个文档计算一个得分,表示该文档与查询的相关性。得分是基于 TF-IDF(词频-逆文档频率)和 BM25 等算法计算的。
- 得分越高,文档与查询的相关性越强。
- 例如,在
match
查询中,文档的得分会根据其包含查询词的频率、查询词的权重、以及文档中其他词的频率来进行计算。 - 计算得分的过程会考虑词条在文档中的出现频率、文档的长度以及查询词在整个索引中的稀有程度。
9. 合并搜索结果并返回
- Elasticsearch 收集所有分片的查询结果后,会根据查询要求对这些结果进行合并(如排序、去重、聚合等)。
- 最终,Elasticsearch 会将文档的
_id
、得分、_source
数据等作为结果返回给用户,通常以 JSON 格式。
响应格式通常如下:
{"took": 1,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "my_index","_id": "1","_score": 1.0,"_source": {"title": "Elasticsearch Basics","content": "Elasticsearch is a distributed search engine."}},{"_index": "my_index","_id": "2","_score": 0.8,"_source": {"title": "Advanced Elasticsearch","content": "Elasticsearch supports advanced search features."}}]}
}
10. 缓存机制
- 为了加速后续的查询,Elasticsearch 会使用缓存机制,缓存一些常见的查询和过滤操作。特别是 查询缓存 和 字段数据缓存(fielddata)可以显著提高查询性能。
- 对于重复的查询,Elasticsearch 会直接从缓存中返回结果,而无需重新执行完整的搜索过程。
总结
Elasticsearch 搜索过程的步骤如下:
- 接收查询请求:解析查询请求,确定目标索引和查询条件。
- 路由和选择分片:根据查询条件决定哪些分片需要参与查询。
- 分片级查询:在每个分片上执行查询,分析查询并通过倒排索引检索相关文档。
- 聚合和排序:在分片级别处理聚合和排序操作。
- 合并分片结果:合并多个分片返回的结果,包括排序、聚合和去重等操作。
- 计算相关性得分:根据查询结果计算每个文档的相关性得分。
- 返回最终结果:返回查询结果,包括文档内容、得分和聚合数据。
通过这些步骤,Elasticsearch 能够在大规模数据集上快速进行分布式搜索,提供高效的查询性能。
相关文章:

详细描述一下Elasticsearch搜索的过程?
大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch搜索的过程?】面试题。希望对大家有帮助; 详细描述一下Elasticsearch搜索的过程? Elasticsearch 的搜索过程是其核心功能之一,允许用户对存储在 Elasticsea…...
Spring、SpringMVC、SpringBoot、Mybatis小结
Spring Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架) Spring框架的核心特性包括依赖注入(Dependency Injection ,DI)、面向切面编程(Aspe…...

.NET 9 运行时中的新增功能
本文介绍了适用于 .NET 9 的 .NET 运行时中的新功能和性能改进。 文章目录 一、支持修剪的功能开关的属性模型二、UnsafeAccessorAttribute 支持泛型参数三、垃圾回收四、控制流实施技术.NET 安装搜索行为性能改进循环优化感应变量加宽Arm64 上的索引后寻址强度降低循环计数器可…...

Linux下安装mysql8.0版本
先确定我的下载安装的目录,安装文件是下载在 /opt/install 目录下面 (安装地址不同的话注意修改地址) 1.在线下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz2.解压 tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.t…...

kvm-dmesg:从宿主机窥探虚拟机内核dmesg日志
在虚拟化环境中,实时获取虚拟机内核日志对于系统管理员和开发者来说至关重要。传统的 dmesg 工具可以方便地查看本地系统的内核日志,但在KVM(基于内核的虚拟机)环境下,获取虚拟机内部的内核日志则复杂得多。为了简化这…...
植物明星大乱斗15
能帮到你的话,就给个赞吧 😘 文章目录 player.hplayer.cppparticle.hparticle.cpp player.h #pragma once #include <graphics.h> #include "vector2.h" #include "animation.h" #include "playerID.h" #include &…...

go-zero(三) 数据库操作
go-zero 数据库操作 在本篇文章中,我们将实现一个用户注册和登录的服务。我们将为此构建一个简单而高效的 API,包括请求参数和响应参数的定义。 一、Mysql连接 1. 创建数据库和表 在 MySQL 中创建名为 test_zero的数据库,并创建user 表 …...
SQL面试题——间隔连续问题
间隔连续问题 某游戏公司记录的用户每日登录数据如下 +----+----------+ | id| date| +----+----------+ |1001|2021-12-12| |1001|2021-12-13| |1001|2021-12-14| |1001|2021-12-16| |1001|2021-12-19| |1001|2021-12-20| |1002|2021-12-12| |1002|2021-12-16| |1002|…...

vim配置 --> 在创建的普通用户下
在目录/etc/ 下面,有个名为vimrc 的文件,这是系统中公共的vim配置文件对所有用户都有效 我们现在创建一个普通用户 dm 创建好以后,我们退出重新链接 再切换到普通用户下 再输入密码(是不显示的,输入完后,…...

(计算机毕设)基于SpringBoot+Vue的房屋租赁系统的设计与实现
博主可接毕设设计!!! 各种毕业设计源码只要是你有的题目我这里都有源码 摘 要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互…...

【含开题报告+文档+PPT+源码】基于SpringBoot的医院药房管理系统
开题报告 在科技迅速发展的今天,各行各业都在积极寻求与现代技术的融合,以提升自身的运营效率和竞争力。医疗行业作为关乎国计民生的关键领域,其信息化建设的步伐尤为迅速。医院药房作为医疗体系中的核心环节,其管理效率和服务质…...

基于SpringBoot的“数码论坛系统设计与实现”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“数码论坛系统设计与实现”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统首页界面图 数码板…...

Linux-第2集-打包压缩 zip、tar WindowsLinux互传
欢迎来到Linux第2集,这一集我会非常详细的说明如何在Linux上进行打包压缩操作,以及解压解包 还有最最重要的压缩包的网络传输 毕竟打包压缩不是目的,把文件最终传到指定位置才是目的 由于打包压缩分开讲没有意义,并且它们俩本来…...

项目进度计划表:详细的甘特图的制作步骤
甘特图(Gantt chart),又称为横道图、条状图(Bar chart),是一种用于管理时间和任务活动的工具。 甘特图由亨利劳伦斯甘特(Henry Laurence Gantt)发明,是一种通过条状图来…...

Cargo Rust 的包管理器
Cargo->Rust 的包管理器 Cargi简介Cargo 的主要功能1. 创建项目2. 管理依赖3. 构建项目4. 运行项目5. 测试代码6. 检查代码7. 生成文档8. 发布和分享包 Cargo 的核心文件1. Cargo.toml2. Cargo.lock **Cargo 的生态系统** 常用命令总结Hello, Cargo! 示例 Cargi简介 Cargo …...

【Rust 编程语言工具】rustup-init.exe 安装与使用指南
rustup-init.exe 是用于安装和管理 Rust 编程语言工具链的 Windows 可执行文件。Rust 是一种系统级编程语言,旨在提供安全、并发和高性能的功能。rustup-init.exe 是官方提供的安装器,用于将 Rust 安装到 Windows 操作系统中,并配置相关环境。…...

集群聊天服务器(12)nginx负载均衡器
目录 负载均衡器nginx负载均衡器优势 如何解决集群聊天服务器跨服务器通信问题?nginx的TCP负载均衡配置nginx配置 负载均衡器 目前最多只能支持2w台客户机进行同时聊天 所以要引入集群,多服务器。 但是客户连哪一台服务器呢?客户并不知道哪一…...

数据挖掘英语及概念
分类 classify 上涨或跌 回归 regression 描述具体数值 分类模型评估 1.混淆(误差)矩阵 confusion matrix 2.ROC曲线 receiver operating characteristic curve 接收者操作特征曲线 3.AUC面积 area under curve ROC曲线下与坐标轴围成的面积&#x…...
springboot第82集:消息队列kafka,kafka-map
官网下载链接:https://kafka.[apache].org/downloads 我下载的是[Scala]2.12 - kafka_2.12-3.1.0.tgz kafka只需要解压下载的压缩包就行了,我这里解压的路径是D:\kafka_2.12-3.1.0,kafka的运行需要依赖zookeeper,当前版本已经内置…...

sql server查看当前正在执行的sql
#统计某类sql执行次数,并按总体cpu消耗时间降序排序 with a as ( select er.session_id,db_name(er.database_id) as DBNAME,sy.last_batch AS 最后执行时间, er.cpu_time ,er.total_elapsed_time/1000 as sum_elapsed_time_s, CAST(csql.text AS varchar(8000)) A…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...