详细描述一下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…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
