尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ElasticSearch 常见用法

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 重要变化:Type 被废弃,一个索引只有一个虚拟_doc类型,不要再写自定义 type主分片数创建索引后不可修改,副本数可以随时修改。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 → 完整内容plaintextdoc1: "小米手机很好用" doc2: "华为手机性价比高" doc3: "小米手机性价比高"倒排索引 ES分词词条 → 关联文档 ID 列表表格Term 词条文档 ID小米doc1,doc3手机doc1,doc2,doc3华为doc2性价比doc2,doc3好用doc1流程:文档写入 ES,经过分词器 Analyzer 拆分成词条 term;构建倒排索引表;查询的时候,把查询语句分词,去倒排索引匹配 term,快速拿到文档 id,再拿完整文档。关键点:Term:分词后的最小单元;分词器 Analyzer:包含字符过滤器、分词器、token 过滤器;中文推荐分词器:ik_max_word(细粒度)、ik_smart(粗粒度)。1.5 写入流程图解(面试必问)plaintext客户端写请求 → 协调节点Coordinating Node ↓ 1. 通过文档id hash路由,算出该文档落到哪个主分片 ↓ 2. 请求转发到对应的主分片节点 ↓ 3. 主分片执行写入,写入内存buffer + translog事务日志(防止宕机丢数据) ↓ 4. 主分片把写请求同步给所有副本分片,副本写入成功 ↓ 5. 所有副本返回成功 → 主分片返回成功给协调节点 → 返回客户端补充两个重要概念:refresh:内存 buffer → 生成 segment 放到文件系统缓存,此时可以被搜索,默认 1 秒刷新。近实时 NRT,不是完全实时。flush:把内存数据持久化到磁盘,清空 translog。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 完整样例版
返回列表