elasticsearch是如何进行搜索的?

请求与转发

  1. 协调节点确定参与搜索的目标索引,及其通过分片路由表确定分片
  2. 对索引所在分片中选择任意节点
  3. 并发请求多个分片的副本分片

副本选择策略

副本选择主要考虑

  • 分片健康状态:选择状态为 green 或 yellow 的副本
  • 节点负载情况:避免查询集中到少数节点
  • 响应时间与性能指标:选择最快的副本以降低响应时间

本地文档查询

  1. 分词:将查询条件进行分词和标准化

    例如,当查询条件是 "北京烤鸭很美味",经过分词后可能会被分成 "北京""烤鸭""很""美味" 等词项,这样便于后续依据这些词项去倒排索引中查找匹配的文档。

  2. segment并发查询

    1. 词项(term)查找:通过倒排索引快速定位匹配文档

      倒排索引保存了每个文档中字段的词项及其对应文档 ID 列表,比如要查找包含 "烤鸭" 这个词项的文档,就可以通过倒排索引迅速定位到有哪些文档 ID 对应的文档包含该词。

    2. 计算文档评分:根据查询条件计算文档的相关性得分(如 TF-IDF、BM25)

      以 TF - IDF 为例,如果文档中某个词出现的频率高(词频高),但在整个语料库(索引中的所有文档集合)中该词比较少见(逆文档频率高),那么这个词所在的文档相关性得分就会相对较高。例如,在一个美食相关的索引中,如果 "全聚德烤鸭" 这个词在某篇介绍全聚德的文档中多次出现,而在其他文档中很少出现,那这篇文档在以 "烤鸭" 为查询词时相关性得分就会比较高。

  3. 分片级别结果收集与排序

    分片会从它的所有 Segment 中收集匹配的文档,并按相关性排序

  4. 返回查询结果:返回

    • 匹配文档的元信息(文档ID、分数等)
    • 排序字段值
    • 聚合中间结果

Segment

segment是底层储存的基本单元,每个分片就是由多个segment组成。是一个不变的、独立的倒排索引,储存了文档的字段、倒排表、储存字段以及其他索引元数据

  • 倒排索引:保存每个文档中字段的词项及其对应文档ID列表,用于快速搜索
  • 储存字段:包含文档实际数据,用于返回结果
  • 词典:包含字段所有唯一的词和元数据(如词频、位置)
  • 评分信息:保存每个词与文档的评分数据,用于计算相关性得分
  • 删除标记:用于标记哪些文档已被删除等相关状态管理

文档内容获取

  1. 协调节点对所有分片返回的文档ID和分数进行合并、排序
  2. 根据文档ID再次请求分片获取文档完整内容
  3. 返回查询的文档内容给客户端
相关推荐
智商网输送线配件26 分钟前
流水线全套配件直供化落地的三个实操切入维度
大数据·运维·自动化·智商网·流水线设备配件
字节跳动数据平台31 分钟前
几小时的视频找 3 秒镜头,你还在一格格拖进度条?
大数据
IT毕设梦工厂39 分钟前
计算机毕业设计选题推荐:基于大数据的城市噪音数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·信息可视化·数据分析·spark·毕业设计·课程设计·数据可视化
IT古董1 小时前
《FDE前沿部署工程师实战教程》23 - Enterprise AI Event Bus:事件驱动、消息队列与AI工作流自动触发
大数据·数据库·人工智能
阿尔法工场研究院1 小时前
宇树们不想重蹈新造车的覆辙
大数据·人工智能·科技·机器人
中电金信1 小时前
中电金信参编的团体标准《商业银行应用程序接口治理能力要求》正式发布
大数据·运维·人工智能
SelectDB2 小时前
1TB/天 × 30 天日志成本怎么估:核对命令、降冷配置与踩坑记录
大数据·数据库·数据分析
SelectDB2 小时前
日志选型别只比 Loki 和 ELK:三条路径、一份可复制的落地清单
大数据·数据库·数据分析
SelectDB2 小时前
ES 写入拒绝与磁盘暴涨:排查命令、参数调整与改用 Doris 的落地步骤
大数据·数据库·数据分析
RPAdaren2 小时前
AI 舆情智能体频繁断跑、漏抓发酵?90% 团队都踩了同一层坑
大数据·人工智能