分布式搜索引擎 Elasticsearch 8.X 核心概念
需求背景
- 互联网公司里面,要做一个商品检索功能,支持关键词检索、高亮展示,过滤商品属性、价格范围、地理位置等。
- 数据团队里面有一个需求,需要实时监控系统日志、网络日志、应用日志等,进行实时分析、搜索和可视化,并可以聚合统计。
什么是 Elasticsearch
- 是⼀个开源,是⼀个基于 Apache Lucene 库构建的 Restful 搜索引擎. Elasticsearch 是在 Solr 之后⼏年推出的。
- 它提供了⼀个分布式,多租户能⼒的全⽂搜索引擎,具有 HTTP Web 界⾯(REST)和⽆架构JSON⽂档
- Elasticsearch 的官⽅客户端库提供 Java,Groovy,PHP,Ruby,Perl,Python,.NET 和 Javascript。
- 官网:https://www.elastic.co/cn/elasticsearch/
Elasticsearch 应用场景
搜索引擎:可以快速而准确地搜索大量的结构化和非结构化数据,用于构建
搜索引擎、电商网站搜索等。实时日志分析: 提供了强大的实时索引功能和聚合功能,非常适合
实时日志分析。数据分析和可视化:Elasticsearch 与 Kibana(Elastic Stack的一个组件)结合使用,可以进行复杂的
数据分析和可视化。实时推荐系统:基于 Elasticsearch 的实时搜索和聚合功能,可以用于构建实时推荐系统。根据用户的
行为和兴趣,动态地推荐相关的内容和产品。电商商品搜索和过滤:Elasticsearch 具有强大的搜索和过滤能力,使其成为构建电商网站的商品搜索和过滤引擎的理想选择。 可以
快速搜索和过滤商品属性、价格范围、地理位置等。地理空间数据分析:Elasticsearch 内置了地理空间数据类型和查询功能,可以对
地理位置进行索引和搜索。 适合于构建地理信息系统(GIS)、位置服务和地理数据分析应用。
核心概念快速上手
在新版 Elasticsearch 中,文档 document 就是一行记录(json),而这些记录存在于索引库(index)中,索引名称必须是小写。
MySQL 与 Elastic Search 对比
| MySQL 数据库 | Elastic Search |
|---|---|
| Database | 7.x 版本前有 Type,对比数据库中的表,新版取消了 |
| Table | Index |
| Row | Document |
| Column | Field |
分片 shards
- 数据量特大,没有足够大的硬盘空间来一次性存储,且一次性搜索那么多的数据,响应跟不上
- ES 提供把数据进行分片存储,这样方便进行拓展和提高吞吐
副本 replicas
- 分片的拷贝,当主分片不可用的时候,副本就充当主分片进行使用
- 索引分片的备份,shard 和 replica 一般存储在不同的节点上,用来提高高可靠性
- 元数据 Elasticsearch 中以
_开头的属性都成为元数据,都有自己特定的意思
总结
ES 默认为一个索引创建1个主分片和 1 个副本,在创建索引的时候使用 settings 属性指定,每个分片必须有零到多个副本。
注意:索引一旦创建成功,主分片 primary shard 数量不可以变(只能重建索引),副本数量可以改变
朔风