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

资讯详情

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

一篇看懂Elasticsearch 是什么

一篇看懂Elasticsearch 是什么 Elasticsearch 是什么?一篇看懂做后端、做搜索、做日志分析的,几乎都绕不开Elasticsearch(常叫ES)。但它到底是个啥、为什么大家都在用、什么时候该用它,很多人其实说不清。一句话先给结论:Elasticsearch 是一个开源的、分布式的「搜索和分析引擎」——简单说,就是专门用来快速搜东西、快速查数据的数据库,尤其擅长全文搜索和日志分析。下面展开说。一、它解决什么问题先看一个很常见的痛点:你有个 MySQL 表,存了几百万篇文章,现在要搜「包含微服务这个词的文章」。用 SQL 的话大概这样:SELECT*FROMarticlesWHEREtitleLIKE%微服务%ORcontentLIKE%微服务%;问题来了:LIKE %xxx%走不了索引,数据一大就全表扫描,慢到爆炸。想做相关性排序(哪篇更像用户想找的)、分词(把高性能微服务拆成高性能“微服务”)、高亮、模糊匹配,SQL 都很难搞。Elasticsearch 就是为这种场景生的:它把文本拆成一个个词建立索引,搜的时候按词去查,又快又准。二、它到底是什么Elasticsearch 是基于 Apache Lucene(一个很牛的 Java 搜索引擎库)封装出来的搜索引擎,由 Elastic 公司开发。几个关键标签:分布式:可以水平扩展,数据自动分片分布到多台机器。近实时:写入后大概 1 秒内就能搜到(不是绝对实时)。RESTful:用 HTTP JSON 交互,GET /索引/_search就能查,任何语言都能调。全文检索强:分词、相关性打分、高亮、自动补全、模糊搜索都是它的强项。它还常和另外两个兄弟组成ELK:Elasticsearch:存和查。Logstash:采集、清洗日志数据。Kibana:可视化界面,画图表、看日志。三、核心概念(和 MySQL 对着看)Elasticsearch关系型数据库(MySQL)说明Index(索引)Database / Table一类文档的集合Document(文档)Row(行)一条数据,是 JSONField(字段)Column(列)文档里的一个属性Mapping(映射)Schema(表结构)定义字段类型Shard(分片)无直接对应索引被切成几块分布到不同机器Replica(副本)无直接对应分片的备份,保证高可用几个重点:文档(Document):ES 里的数据单元,一条 JSON。比如一篇博文就是一个文档。索引(Index):文档的集合,可以理解成 MySQL 里的一张表。分片(Shard) 副本(Replica):一个索引可以拆成多个分片,分片还有副本。数据大了就多分几片,多上几台机器,天然支持水平扩展和高可用。四、为什么它搜得那么快:倒排索引这是 ES 的核心,值得单独说。普通的索引是「文档 → 词」(正向):知道是第几篇文章,才知道里面有哪些词。ES 用的是「词 → 文档」(倒排):微服务 → 文档1, 文档5, 文档12 性能 → 文档3, 文档5, 文档20 分布式 → 文档1, 文档8你搜「微服务」,它不用一篇篇扫,直接查这个「词 → 文档」的映射表,瞬间定位到文档 1、5、12。再配合「分词器(Analyzer)」:写入时把「高性能微服务框架」拆成「高性能」「微服务」「框架」几个词分别建索引;查询时也把搜索词拆开去匹配。中文分词常用ik 分词器。这也是为什么 ES 做搜索比 MySQL 强得多——MySQL 擅长按固定字段精确查,ES 擅长在海量文本里按词模糊、快速地搜。五、典型应用场景电商搜索:搜商品,支持分词、相关性排序、价格筛选、自动补全。日志分析:收集各服务的日志,快速检索、统计报错(配合 ELK)。全文搜索:站内文章、文档、知识库搜索。实时数据分析:比如实时统计日志里的访问量、错误率,配合 Kibana 出仪表盘。搜索建议 / 自动补全:输入iph提示iphone。地理位置搜索:搜附近的店。六、什么时候该用、什么时候别用适合用 ES 的场景:有大量文本要全文搜索;要做模糊匹配、相关性排序、分词、高亮;要快速分析海量日志/数据。不适合用 ES 的场景:强事务、频繁更新的业务数据(比如订单、账户余额)——这些还是老实用 MySQL 这类关系库,ES 的强项不在事务和一致性;数据量很小、用 SQL 精确查询就够了的——杀鸡不用牛刀;经常要做复杂的多表 JOIN—— ES 不擅长像关系库那样 join。结尾一句话总结:MySQL 是按格式存数据、精确查,Elasticsearch 是把文本拆成词、快速搜。它俩不是替代关系,很多公司是 MySQL 存业务数据,ES 建一份索引专门做搜索和日志分析,各干各擅长的活。下次听到「上 ES 搜一下」「ELK 里查查日志」,就不会懵了。
返回列表