持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
ES 是什么
Elasticsearch 是一个基于Apache Lucene 的分布式搜索和分析引擎,位于 Elastic Stack 核心。它是 Shay Banon 创建,2010年2月发布的。Lucene 更多的是作为一个中间件,而 ES 则是一个成品。
在涉及【索引】【搜索】【分析】的领域有着强大的功能。与之相对,Elastic Stack 中的 Logstash 和 Beats 有助于收集、聚合和丰富数据并将其存储在 Elasticsearch 中。 Kibana 支持我们以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。
- Elasticsearch 为所有类型的数据提供【接近实时】的搜索和分析。
- 无论是结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。
- 随着数据和查询量的增长,Elasticsearch 的分布式特性使业务的部署能够随之无缝增长。
虽然不是每个问题都是搜索问题,但 Elasticsearch 提供了速度和灵活性来处理各种用例中的数据,一些常见的场景如下:
- 向应用或网站添加搜索框
- 存储和分析日志、指标和安全事件数据
- 使用机器学习实时自动建模数据行为
- 使用 Elasticsearch 作为存储引擎自动化业务工作流程
- 使用 Elasticsearch 作为地理信息系统 (GIS) 管理、集成和分析空间信息
- 使用 Elasticsearch 作为生物信息学研究工具来存储和处理遗传数据
作为初探 ES 的业务开发人员,只需要记住一点:
通过ES可以很方便的使大量数据具有搜索、分析和探索的能力。
与关系型数据库对比
Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式。
同时ElasticSearch和关系型数据库比如MySQL有很多相似的概念:
关系型数据库(比如MySQL) | 非关系型数据库(ElasticSearch) |
---|---|
数据库Database | 索引Index |
表Table | 类型Type |
数据行Row | 文档Document |
数据列Column | 字段Field |
约束Schema | 映射Mapping |
这里,mapping相当于数据库表的定义。
基本概念
索引
ES 的数据总是存储在一个或多个索引中,上面也提到,类似数据库的概念,我们可以向索引进行读写。ES 的索引可能由一个或多个 Lucene 索引构成。
文档
文档是 ES 的主要实体,不管业务的场景如何,最后都会归于对【文档】document 的搜索。一个文档本质上就是一个 json 对象,示例:
{
"name" : "John",
"sex" : "Male",
"age" : 25,
"birthDate": "1990/05/01",
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
注意,文档之间可能字段并不相同,没有固定格式结构。ES 的文档最终都会被存为 Lucene 文档。
类型
每个文档都需要有自己对应的类型,对应自己的一套 mapping,类似一个 MySQL 中的 table。
映射
中文里我们叫它映射。只不过实际用的时候,大家一般直接叫 mapping。
所有文档在写入索引前都会被分析,用户可以设置参数决定如何将【输入文本】分割为【词条】,哪些词条应该被过滤等,而 mapping 所要做的就是存储分析链所需的所有信息。
mapping 可以手动配置也可以自动配置。
节点
这是一个物理概念,单个 ES 服务实例就被称为节点(node),生产环境中,我们通常不会只部署单机 ES,而是会部署一个集群。
通常来说节点分为 3 类:
- 数据节点:持有数据,提供对这些数据的搜索;
- master 节点:控制其他节点工作,一个集群中只有一个 master;
- 部落节点:连接多个集群,支持我们在多个集群上执行可以在单集群 ES 上使用的功能。
分片
分片支持了用户推送超过单机容量的数据到 ES 集群,允许系统存储的数据总量超过单机的容量。ES 将数据散布到多个物理 Lucene 索引上,这些索引就被称为 shard(分片)。ES 会自动完成 sharding 处理,大家可以类比为我们在 MySQL 使用的分片库。
需要注意的是,分片数量在索引创建时就被配置好了,无法再改。所以参数调优也是很重要的。
副本
与分片相对,副本则是为了解决访问请求量大时,单机扛不住的问题。本质是冗余的思路。每个 shard 创建多个冗余副本。处理查询的时候,可以把这些副本当成主分片使用。
若主分片宕机,ES 也会自动从该分片副本中选出一个新的作为主分片。而且我们可以随着业务需要,在任意时间添加或删除副本,非常方便。