拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Elasticsearch核心概念

Elasticsearch核心概念 Elasticsearch简称 ES是一个分布式、近实时的全文检索与搜索引擎底层基于 Apache Lucene 开发使用 Java 编写。对外提供 RESTful HTTP API用 JSON 交互天然支持集群、分片、副本很容易水平扩容。一、集群 节点1、Cluster 集群一组 ES 节点名字相同自动组成集群对外提供统一服务自动分片、故障转移。2、Node 节点单个 ES 进程节点有角色Master-eligible 主候选节点负责选主、维护集群元数据分片分配、mapping、索引信息不存业务数据Data 数据节点存放分片负责读写、检索、聚合业务压力主要在这里Coordinating 协调节点接收客户端请求路由分片聚合分片返回结果相当于网关生产一般拆角色单机开发节点同时兼任多个角色。二、索引、文档、字段、Mapping对比mysql:MySQLESTableIndex索引RowDocument文档ColumnField字段SchemaMapping映射Index 索引逻辑数据集存放一类文档商品、日志。7.x 之后彻底移除 Type一个 Index 只有一个虚拟 type_doc。Document 文档ES 最小数据单元JSON 格式唯一标识_id。Field 字段文档里 KV 中的 key每个字段有类型text分词用于搜索、keyword不分词精确匹配、聚合、排序、long、date等。Mapping 映射定义索引里面字段类型、分词器、是否存储、是否建索引。动态 mapping写入 JSON 自动推断字段类型开发方便生产慎用容易类型错乱静态 mapping提前手动定义生产推荐Analyzer 分词器针对 text 字段把文本切分成词项 term。由三部分字符过滤器 → 分词器 → 词项过滤器小写、停用词。中文常用ik。三、分片 ShardPrimary Shard 主分片索引创建时指定一旦创建不能修改数量只能 split/shrink 重建索引。文档通过hash(_id) % 主分片数路由到对应主分片Elastic。写入先写主分片主分片成功后同步到副本。Replica Shard 副本分片主分片的拷贝。作用故障容灾 分担读请求压力。副本不能和主分片放在同一个节点。副本数量可以随时动态调整。公式hash(routing) % number_of_primary_shardsrouting 默认是_id。四、Lucene 底层核心Segment 段Shard 内部由多个不可变的 Segment 组成。Segment 一旦写入磁盘永远不修改。更新文档旧文档标记删除新增文档写入新 segment删除文档只是打删除标记不会立刻删磁盘文件段合并 Segment Merge后台线程把多个小 segment 合并成大 segment清理已删除文档会消耗大量 CPU、IO生产重点优化点Inverted Index 倒排索引ES 检索核心MySQL 是【文档 → 词】的正向索引倒排是词 Term → 文档列表Posting List。Term分词后的单词Posting List包含这个词的文档 ID、词频、位置短语搜索。搜索时直接查 term快速找到匹配文档实现全文检索。近实时 NRTNear Real-TimeES 不是实时写入可见。写入文档先放到内存 bufferrefresh把 buffer 生成新 segment 写入文件缓存不是磁盘文档此时可搜索。默认 refresh_interval1s。所以写入后最多等 1 秒才能搜到。flush把 segment 刷到磁盘持久化生成 commit point。五、查询相关概念Query FilterQuery打分BM25 相关性算匹配度结果按相关性排序会做缓存。如 match 全文搜索。Filter只判断是否匹配不打分可缓存性能更高。如 term、range。BM25ES 默认相关性打分算法用来计算文档和搜索词的匹配分数决定结果排序。DSLES 查询语法JSON 格式分为叶子查询match/term、复合查询bool/must/should/must_not/filter。Alias 索引别名给索引起别名一个别名可以指向多个索引。用于零停机重建索引双写切换日志场景滚动索引。Data Stream 数据流ES7.9专门给日志这类追加写入、带时间戳场景自动管理滚动的 backing index不用手动维护别名。
返回列表