当前位置: 首页 > news >正文

ElasticSearch 常见用法

一、ElasticSearch 整体介绍

1.1 是什么

ElasticSearch(简称 ES)是分布式、RESTful 风格的全文搜索引擎,底层基于 Lucene。

  • Lucene:底层检索库,只提供 jar 包,复杂,不支持分布式
  • ES:对 Lucene 封装,提供 HTTP‑REST API、Java 客户端,开箱即用,天然分布式集群。

适用场景:全文检索、日志分析(ELK 栈)、商品搜索、APP 检索、日志埋点、数据分析。 不适合:大量实时更新、强事务、高频写入。

1.2 ES 核心概念图解(面试必背,可手画)

ES7.x 之后:移除 Type,一个索引就对应一个 type,一个索引就是一堆文档

plaintext

【集群 Cluster】 ├─节点 Node1(主节点/数据节点) │ ├─索引 Index(类比Mysql数据库 database) │ │ ├─分片 Shard(分片,分为主分片primary、副本replica) │ │ │ └─段 Segment(Lucene底层,不可修改) │ │ └─文档 Document(类比mysql row行,json格式) │ │ └─字段 Field(类比mysql column列) ├─节点 Node2 └─节点 Node3

表格

ES7.x 概念MySQL 类比
Cluster 集群数据库实例
Index 索引Database 数据库
Document 文档Row 一行数据
Field 字段Column 列
Mapping 映射Table 表结构(字段类型、分词器)
Shard 分片分库分表
Replica 副本备份

⚠️ES7 重要变化:

  1. Type 被废弃,一个索引只有一个虚拟_doc类型,不要再写自定义 type
  2. 主分片数创建索引后不可修改,副本数可以随时修改。

1.3 分片原理图解(面试高频)

plaintext

索引创建:3主分片,1副本,共6个分片 Primary(主分片): P0 P1 P2 Replica(副本): R0 R1 R2 集群3个节点部署: Node1: P0 R1 Node2: P1 R2 Node3: P2 R0 规则: 1. 主分片和它的副本**不能放在同一个节点**(节点宕机,副本失效) 2. 写请求只写到【主分片】,同步复制到副本 3. 读请求:可以读主分片,也可以读副本,负载均衡 4. 主分片数量索引创建完不能修改!只能重建索引迁移数据
  • 主分片:数据真实写入,处理写请求;
  • 副本分片:备份,分担读压力,主分片挂掉,副本升级为主分片,保证高可用。

1.4 倒排索引(核心!面试必考)

ES 底层靠倒排索引实现极速全文检索,正排索引就是普通数据库。

正排索引(Mysql)文档 ID → 完整内容

plaintext

doc1: "小米手机很好用" doc2: "华为手机性价比高" doc3: "小米手机性价比高"

倒排索引 ES分词词条 → 关联文档 ID 列表

表格

Term 词条文档 ID
小米doc1,doc3
手机doc1,doc2,doc3
华为doc2
性价比doc2,doc3
好用doc1

流程:

  1. 文档写入 ES,经过分词器 Analyzer 拆分成词条 term;
  2. 构建倒排索引表;
  3. 查询的时候,把查询语句分词,去倒排索引匹配 term,快速拿到文档 id,再拿完整文档。

关键点:

  • Term:分词后的最小单元;
  • 分词器 Analyzer:包含字符过滤器、分词器、token 过滤器;
  • 中文推荐分词器:ik_max_word(细粒度)、ik_smart(粗粒度)。

1.5 写入流程图解(面试必问)

plaintext

客户端写请求 → 协调节点Coordinating Node ↓ 1. 通过文档id hash路由,算出该文档落到哪个主分片 ↓ 2. 请求转发到对应的主分片节点 ↓ 3. 主分片执行写入,写入内存buffer + translog事务日志(防止宕机丢数据) ↓ 4. 主分片把写请求同步给所有副本分片,副本写入成功 ↓ 5. 所有副本返回成功 → 主分片返回成功给协调节点 → 返回客户端

补充两个重要概念:

  1. refresh:内存 buffer → 生成 segment 放到文件系统缓存,此时可以被搜索,默认 1 秒刷新。近实时 NRT,不是完全实时。
  2. flush:把内存数据持久化到磁盘,清空 translog。
  3. translog:类似 mysql redo log,宕机恢复数据。

面试常问:为什么 ES 写入不是实时?默认 1s refresh,写入后 1 秒后才能搜到。想要强实时可以手动 refresh,性能会暴跌。

1.6 查询流程图解

plaintext

客户端搜索请求 → 协调节点 1. 协调节点把查询转发给该索引**所有主/副本分片** 2. 每个分片本地执行检索,返回文档id+打分_score给协调节点 3. 协调节点合并各个分片返回结果,全局排序、分页 4. 根据文档id,去各个分片拉取完整文档数据 5. 返回最终结果给客户端

1.7 ES 的打分机制

默认 BM25 算法(7.x 默认,替代旧的 TF‑IDF),计算词条和文档相关性得分_score。

二、SpringBoot + ElasticSearch 完整样例

http://www.jsqmd.com/news/1407996/

相关文章:

  • 从听说到托管:我用 OAS 阴阳师脚本两周的完整上手记录
  • 阴阳师自动化脚本OAS四连问:从值不值得装到怎么玩出花
  • C语言sizeof运算符深度解析:从内存对齐到跨平台编程实战
  • 输入法词库转换终极指南:深蓝词库转换,免费开源的一键词库互转神器
  • 装一次,三端通用:wechat-need-web 让微信网页版在浏览器里完整可用的快速上手指南
  • SketchUp STL插件实战指南:一条命令打通模型与3D打印之间的最后关卡
  • 2026年8月17日重庆市潼南区广电500M单宽带怎么选? - 领卡园地
  • 2026 年更新:蚌埠正规的高温高压安全阀制造商哪家可靠,锅炉炸锅前的10秒,全靠这不起眼的家伙扛住最后关卡!-洲程阀门制造 - 行业推荐官[官方】--
  • 香橙派Zero 3智能温控风扇DIY:Python+GPIO实现主动散热
  • ChatGPT、Codex实战:前端只改一个按钮,为什么还要等这么久?小改动最容易选错模型
  • 无人机具身搜救基准ESARBench:填补静态检测到动态任务执行的鸿沟
  • Vue-Cli 入门指南:从零搭建现代化 Vue.js 开发环境
  • AI大模型API价格变动下,开发者如何构建弹性技术架构应对成本与风险
  • 2026年8月17日重庆市潼南区广电1000M单宽带办理避坑实录 - 领卡园地
  • 无损音乐批量下载工具实战:5 步把网易云歌单变成你的本地 FLAC 曲库
  • 广州本地活动板房集装箱厂家推荐-昌达钢结构经营部 - 企业推荐管【认证】
  • Apifox WebSocket调试:从手动脚本到自动化测试的完整实践
  • 别再反复插拔SD卡了!NS-USBloader一站式搞定Switch注入、传游戏与文件分割
  • LLM智能体安全新范式:用确定性门机制防范推理链中的静默策略违规
  • 常德GEO系统怎么选?按生意类型挑技术栈才不踩坑 - 华果数字
  • NS-USBloader快速上手手册:3大核心玩法搞定Switch游戏NSP传输、RCM注入与文件分割合并
  • 2026 年现阶段六盘水有实力的SBH25-M 非晶合金油浸式变压器制造厂怎么联系,变电站能耗竟能砍半?这玩意儿藏着普通人不知道的节能秘密 - 行业推荐官-2
  • 第七史诗自动化挂机 E7Helper 完整跑通指南:睡前点一下,醒来收装备
  • 2026年8月17日重庆市潼南区联通1000M宽带怎么选? - 领卡园地
  • 2026年挑选汽车内饰件模内注塑靠谱厂家实用技巧分享 - 起跑123
  • 三步搞定SketchUp STL导入导出:免费开源插件打通3D打印全流程实战指南
  • 基于PaddleOCR的图片自动分类系统:从OCR识别到规则引擎的完整实现
  • 2026 年当下,石景山专业的油污管道清洗公司怎么联系,厨房下水堵臭?试试这玩意儿,比你找的家政队省一半钱还干净! - 企业推荐管【认证】
  • 宝鸡大口径无缝钢管厂家联系电话 - 行业鉴选官
  • 2026年宁波诚德兴分享汽车内饰件模内注塑选购实用技巧 - 起跑123