简介
Elasticsearch(ES) 是基于Lucene 的全文搜索和分析引擎.
允许快速, 近 实时 地存储, 搜索和分析大量数据, 并支持多租户.
ES 使用 Java 开发, 并使用Lucene作为核心来实现所有索引和搜索功能. 但是 ES 使用了更加简单的RESTful API来隐藏 Lucene 的复杂性, 让全文搜索变得简单.
相关概念
ES 中: 集群, 节点, 索引, 类型, 文档, 分片, 映射都是什么?
集群 Cluster
集群简介
cluster 是一组具有相同 cluster.name 的节点集合, 他们协同工作, 共享数据并提供故障转移和扩展功能, 一个集群最少最少有一个节点组成.
cluster 由唯一的名称标识, 通常这个名称是 elasticsearch. 这个名称相同重要, 因为如果节点设置为按名称加入集群的话, 该节点只能是集群的一部分.
所以为了确保节点能加入到正确的 cluster 中, 需要确保不同的环境使用不同的集群名称. 否则会导致节点加入到错误的 cluster 中.
集群健康状态
cluster 通过三种不同的颜色来标识健康状态:
- 绿色: 一切都很好(集群功能齐全)
- 黄色: 所有数据均可用, 单尚未分配一些副本(集群功能齐全)
- 红色: 某些数据由于某种原因不可用(集群部分功能) 当集群为红色的时候, 它将继续提供来自可用分片的搜索请求, 但是也需要尽可能快的修复它, 因为存在未分配的分片
节点 Node
Node 一个运行的 ES 实例就是一个节点.
节点存储数据并参与集群的索引和搜索功能.
节点由名称表示, 默认情况下, 该名称是在启动时分配给节点的随机通用唯一标识符(UUID), 也可以设置自定义的任何节点名称, 这个名称对于管理非常重要, 可以知道哪些服务于 ES集群中的哪些几点相对应.
节点可以设置为按照集群名称加入指定的集群
索引 Index
索引具有某些类似特性的文档集合, 由名称标识(必须全部为小写字母), 此名称用于在对其中的文档执行索引, 搜索, 更新和删除操作时引用索引.
类型 Type
类型, 曾经是索引的逻辑类别/分区, 允许在同一个索引中存储不同类型的文档.
类型概念在 6.0.0 版本中弃用. 将不再可能在索引中创建多个类型, 并且在高版本中移除整个类型的概念
文档 Document
文档是可以建立索引的基本单元. 文档以JSON表示.
例如可以为单个用户提供文档, 为单个产品提供一个文档, 为单个订单提供一个文档.
在索引中, 可以根据需要, 存储任意数量的文档, 需要注意的是, 尽管文档实际上驻留在索引中, 但实际上必须将文档编入索引/分配给索引中的类型.
分片 Shards
索引可能存储在大量超过单个节点的硬件限制的数据
副本 Replicasedit
副本是对分片的复制. 目的是为了当分片/节点发生故障的时候提供高可用性, 并且可以扩展搜索量/吞吐量.
ES 和传统关系型数据库对比
| 关系型数据库 | Elasticsearch |
|---|---|
| Database(库) | Index(索引) |
| Tables(表) | Types(类型) |
| Rows(行) | Documents( 文档) |
| columns(列) | Fields(属性) |
ES 可以包含多个索引(数据库), 每个索引可以有多个类型(表), 每个类型包含多个文档(行), 每个文档包含多字段(列)