Elasticsearch 是 Elastic Stack 核心的分布式搜索和分析引擎。Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论是结构化还是非结构化文本、数值数据还是地理空间数据,Elasticsearch 都可以以支持快速搜索的方式有效地存储和索引它。Elasticsearch 可以远远超越简单的数据检索和聚合信息,以发现数据中的趋势和模式。随着数据和查询量的增长,Elasticsearch 的分布式特性使部署能够随之无缝增长。
在详细介绍 Elasticsearch 基本概念之前,我们先来将 Elasticsearch 基本概念与关系数据库的基本概念做个类比:
关系数据库 | Elasticsearch |
---|---|
Database(数据库) | Index(索引) |
Table(表) | Type(索引) |
Row(行) | Document(文档) |
Column(列) | Field(字段) |
表结构 | Mapping(映射) |
一个索引是一个文档的集合。每个索引有唯一的名字,通过这个名字来操作它。
指在一个索引中,可以索引不同类型的文档,如用户数据、订单数据、商品数据等。在 ES 6.x 中,一个索引中可以创建多个类型;但从 ES 7.x 开始,一个索引中只能创建一个类型,如果我们不指定类型名称,ES 会使用默认的类型名称_doc。
被索引的一条数据,索引的基本信息单元,以JSON格式来表示。
可以简单理解成 JSON 中的各个字段。
映射用来定义文档中每个字段的属性,例如类型、分词等其它规则约束。
存储集群的数据,参与集群的索引和搜索功能。服务上运行的一个 ES 实例就是一个节点, 一台服务器上可以有多个 ES 节点。
将多个运行 ES 的服务器节点组织在一起就是 ES 集群,如果只有一个节点也算是集群。每个集群都有一个名称(cluster name),作为其唯一标识,默认为“elasticsearch”。
在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上。分片的好处:允许我们水平切分/扩展容量,可在多个分片上进行分布式的、并行的操作,提高系统的性能和吞吐量。
见 CentOS7和8下安装Elasticsearch。
请求:
curl -X GET "192.168.1.38:9200/_cat/health?v"
响应:
C:\>curl -X GET "192.168.1.38:9200/_cat/health?v"
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1646814855 08:34:15 elasticsearch yellow 1 1 5 5 0 0 1 0 - 83.3%
请求:
curl -X GET "192.168.1.38:9200/_cat/nodes?v"
响应:
C:\>curl -X GET "192.168.1.38:9200/_cat/nodes?v"
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.1.38 46 92 0 0.17 0.14 0.10 cdfhilmrstw * localhost.localdomain
请求:
curl -X GET "192.168.1.38:9200/_cat/indices?v"
响应:
C:\>curl -X GET "192.168.1.38:9200/_cat/indices?v"
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .geoip_databases xKlc3jc5QZO_ZQ7i0dyOjg 1 0 41 36 42.3mb 42.3mb
yellow open lili_logs 5jpabTJgTEm_f0uwVoMzQA 1 1 55 0 98.1kb 98.1kb
green open lili_goods nx9i_dg8TrCpuoqa7SFDdA 3 0 726 1 1.2mb 1.2mb
请求:
curl -X PUT "192.168.1.38:9200/order?pretty"
响应:
C:\>curl -X PUT "192.168.1.38:9200/order?pretty"
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "order"
}