Skip to content
章节导航

分布式搜索引擎 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
Database7.x 版本前有 Type,对比数据库中的表,新版取消了
TableIndex
RowDocument
ColumnField

分片 shards

  • 数据量特大,没有足够大的硬盘空间来一次性存储,且一次性搜索那么多的数据,响应跟不上
  • ES 提供把数据进行分片存储,这样方便进行拓展和提高吞吐

副本 replicas

  • 分片的拷贝,当主分片不可用的时候,副本就充当主分片进行使用
  • 索引分片的备份,shard 和 replica 一般存储在不同的节点上,用来提高高可靠性
  • 元数据 Elasticsearch 中以 _ 开头的属性都成为元数据,都有自己特定的意思

总结

ES 默认为一个索引创建1个主分片和 1 个副本,在创建索引的时候使用 settings 属性指定,每个分片必须有零到多个副本。

注意:索引一旦创建成功,主分片 primary shard 数量不可以变(只能重建索引),副本数量可以改变