es总结

elasticSearch 的基本概念

index

在Elasticsearch中,索引是存储相关数据的数据结构,可以理解为数据库中的表。

在创建索引时,需要定义每个字段的数据类型(如文本、数字、日期等)和其他属性(如是否需要分析、是否存储等)。此外,映射还可以定义其他高级功能,如聚合、排序和过滤等。

Type

在早期版本的Elasticsearch中,类型(type)是一个非常重要的概念。每个索引内部都可以有多个类型,而每个类型下又可以存储多个文档。类型实际上是索引内部的一种逻辑分区,通过类型名称在索引内进行唯一标识。

从Elasticsearch 7.x版本开始,索引中的每个文档都直接属于一个索引,而不再需要指定类型。这主要是为了简化索引和查询操作,提高查询效率。

document

文档是Elasticsearch中存储和检索的基本单位,它是序列化为JSON格式的数据结构

cluster

一个Elasticsearch集群通常包含了多个节点(Node)和一个或多个索引(Index),并且这些节点和索引共同构成了整个Elasticsearch集群,在所有节点上提供联合索引和搜索功能。

每个Cluster都有一个唯一的名称,即cluster name,它用于标识和区分不同的Elasticsearch集群。

node

在Elasticsearch集群中,Node是指运行Elasticsearch实例的服务器。每个Node都有自己的名称和标识符,并且都有自己的数据存储和索引存储。

一个Elasticsearch集群由一个或多个Node组成,这些Node通过它们的集群名称进行标识。在默认情况下,如果Elasticsearch已经开始运行,它会自动生成一个叫做“elasticsearch”的集群。我们也可以在配置文件(elasticsearch.yml)中定制我们的集群名字。

Node在Elasticsearch中扮演着不同的角色。根据节点的配置和功能,可以将Node分为以下几种类型:

  • Master Node:负责整个Cluster的配置和管理任务,如创建、更新和删除索引,添加或删除Node等。一个Cluster中至少需要有一个Master Node。
  • Data Node:主要负责数据的存储和处理,它们可以处理数据的CRUD操作、搜索操作、聚合操作等。一个Cluster中可以有多个Data Node。
  • Ingest Node:主要负责对文档进行预处理,如解析、转换、过滤等操作,然后再将文档写入到Index中。每个Cluster中至少需要有一个Ingest Node。 除了上述的三种类型外,还可以有Tribe Node、Remote Cluster Client等特殊用途的Node。

Node之间是对等关系(去中心化),每个节点上面的集群状态数据都是实时同步的。如果Master节点出故障,按照预定的程序,其他一台Node机器会被选举成为新的Master。

需要注意的是,一个Node可以同时拥有一种或几种功能,如一个Node可以同时是Master Node和Data Node。

shards

在Elasticsearch中,Shards是索引的分片,每个Shard都是一个基于Lucene的索引。当索引的数据量太大时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够用。这种情况下,数据可以被分为较小的分片,每个分片放到不同的服务器上。每个分片可以有零个或多个副本。这不仅能够提高查询效率,还能够提高系统的可靠性和可用性。如果某个节点或Shard发生故障,Elasticsearch可以从其他节点或Shard的副本中恢复数据,从而保证数据的可靠性和可用性。

每个Shard都存储在集群中的某个节点上,每个节点可以存储一个或多个Shard。当查询一个索引时,Elasticsearch会在所有的Shard上执行查询,并将结果合并返回给用户。

对于每个索引,在创建时需要指定主分片的数量,一旦索引创建后,主分片的数量就不能更改。

replicas

在Elasticsearch中,Replicas是指索引的副本。它们的作用主要有两点:

  • 提高系统的容错性。当某个节点发生故障,或者某个分片(Shard)损坏或丢失时,可以从副本中恢复数据。这意味着,即使一个节点或分片出现问题,也不会导致整个索引的数据丢失。这种机制可以增加系统的可靠性,并减少因节点或分片故障导致的宕机时间。
  • 提高查询效率。Elasticsearch会自动对搜索请求进行负载均衡,可以将搜索请求分配到多个节点上,从而并行处理搜索请求,提高查询效率。这种负载均衡机制可以在节点之间分发查询请求,使得每个节点都可以处理一部分查询请求,从而避免了一个节点的瓶颈效应。

需要注意的是,在Elasticsearch中,每个索引可以有多个副本(Replicas),但是每个副本只能有一个主分片(Primary Shard)。可以增加或删除副本的数量。

ES概念 关系型数据库
Index(索引)支持全文检索 Table(表)
Document(文档),不同文档可以有不同的字段集合 Row(数据行)
Field(字段) Column(数据列)
Mapping(映射) Schema(模式)

基本的api

查看健康度

1
GET /_cat/health?v

索引

  • 查询所有索引
1
GET /_cat/indices?V
  • 创建索引
1
PUT /my-index
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
PUT /review-1
{
"settings": {
"number_of_replicas": 1
},
"mappings": {
"properties": {
"id":{
"type": "long"
},
"userID":{
"type": "long"
},
"score":{
"type": "integer"
},
"status":{
"type": "integer"
},
"content":{
"type": "text"
},
"publishTime":{
"type": "date"
},
"tags":{
"type": "nested",
"properties": {
"code":{
"type": "keyword"
},
"title":{
"type": "text"
}
}
}
}
},
"aliases": {
"review_1": {}
}
}
  • 删除索引
1
DELETE /my-index

文档

创建文档

1
PUT /my-indexName/_create/id

判断文档是否存在

1
HEAD /my-indexName/_doc/id

获取文档

1
GET /my-indexName/_doc/id

获取数据

1
GET /my-indexName/_source/id

获取指定字段

1
GET /my-indexName/_source/id?_source=content,score

更新文档

1
POST /my-indexName/_update/id

批量获取

1
GET /my-indexName/_mget

删除文档

1
DELETE /my-indexName/_doc/id

获取数量

1
GET /my-indexName/_count

elasticSearch stack 生态圈

image-20240603105008467

image-20240603111537853

  • url Search

    • q 指定查询语句,使用 query string syntax
    • df 默认字段
    • sort 排序 /from 和 size用于 分页
    • profile 可查看查询是如何否被执行
  • request body search

precision 查准率 –尽可能返回较少的无关文档

recall 查全率 –尽可能返回较多的相关文档

ranking


es总结
http://example.com/2024/04/09/es总结/
作者
Forrest
发布于
2024年4月9日
许可协议