ES入门公开课

三、ES入门

1.基本概念

索引、文档与REST API

文档

1、ES是面向文档的,它是所有可搜索数据的最小单位。(可理解成关系型数据库中的一条记录)
2、文档会被序列化成JSON格式,保存在ES中。JSON对象由字段组成,每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围类型)
3、每个文档都有一个Unique ID,可自己指定或由ES自动生成。
4、JSON文档格式灵活,不需预先定义:

  • 字段的类型可以指定或者通过ES自动推算
  • 支持数组/嵌套

在这里插入图片描述
5、文档的元数据
在这里插入图片描述

索引

在这里插入图片描述

类型

1、在7.0之前,一个Index可以设置多个Types。每个Type下是一组具有相同结构的文档。
2、目前Type已经被Deprecated。7.0开始,一个索引只能创建一个Type-“_doc”
3、与传统关系型数据库的类比:
在这里插入图片描述
ES:数据相关性/高性能全文检索
RDMS:事务性/Join
4、REST API,方便与其他语言整合在这里插入图片描述


节点、集群、分片和副本

分布式架构

分布式系统的:
1、高可用性

  • 服务可用性:允许有节点停止服务
  • 数据可用性:部分节点丢失,不会丢失数据
    2、可扩展性
  • 请求量提升/数据的不断增长

ES分布式架构的好处:存储的水平扩容、提高系统的可用性

ES分布式架构:
1、不同集群通过不同的名字来区分。默认名字“elasticsearch”
2、通过配置文件修改,或在命令行中-E cluster.name=geektime进行设定
3、一个集群可以有一个或多个节点

节点

1、节点是一个ES的实例

  • 本质上是一个Java进程
  • 一台机器上可运行多个ES进程,但生产环境一般建议一台机器上只运行一个ES实例
    2、每个节点都有名字,通过配置文件配置,或者启动时-E node.name=node1指定
    3、每个节点在启动后,会分配一个UID,保存在data目录下
    4、Master-eligible nodes和Master Node:
    每个节点启动后,默认就是一个Master-eligible节点,可以设置node.master:false禁止。
    Master-eligible节点可以参加选主流程,称为Master节点。
    当第一个节点启动时,它会将自己选举成Master节点。
    每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息:
  • 集群状态,维护了一个集群中必要的信息:所有节点的信息、所有的索引和其相关的Mapping和Setting信息、分片的路由信息;
  • 任意节点都能修改信息会导致数据的不一致性。
    5、Data Node和Coordinating Node
    Data Node:负责保存分片数据,在数据扩展上起到了至关重要的作用
    Coordinating Node:负责接收Client的请求,将请求分发到合适的节点,最终把结果汇集到一起。每个节点默认都起到了Coordinating Node的职责。
    6、其他节点类型:
    Hot&Warm Node:不同硬件配置的Data Node,降低集群部署成本
    Machine Learning Node:负责跑机器学习,用来做异常检测
    Tribe Node:(5.3开始使用Cross Cluster Search)连接到不同的ES集群,并支持将这些集群当成一个单独的集群处理
    7、配置节点类型:
  • 开发环境中一个节点可以承担多种角色
  • 生产环境中,应该设置单一的角色的节点
    在这里插入图片描述
分片(Primary Shard和Replica Shard)

在这里插入图片描述
主分片数在索引创建时指定,后续不允许修改,除非Reindex;副本分片数可以动态调整。
示例:
在这里插入图片描述
注意:每个分片的副本是分散在其他节点上的。

分片的设定:
过小:导致后续无法增加节点实现水平扩展;单个分片的数据量太大,导致数据重新分配耗时。
过大:影响搜索结果的相关性打分,影响统计结果的准确性;单个节点上过多的分片,会导致资源浪费,同时影响性能。
7.0开始,默认主分片设置成1,解决了over-sharding问题。

查看集群健康状况:GET _cluster/health
Green:主分片与副本都正常分配
Yellow:主分片全部正常分配,有副本分片未能正常分配
Red:有主分片未能分配


文档的基本CURD与批量操作

在这里插入图片描述

Create文档

支持指定文档Id和自动生成文档Id两种方式

  • PUT users/_create/1
    {
    “firstName”:“Jack”,
    “lastName”:“Johnson”
    }
    指定id,如果该id的文档已存在,操作失败
  • POST /users/_doc
    {
    “firstName”:“Jack”,
    “lastName”:“Johnson”
    }
    自动生成文档id
Get文档

在这里插入图片描述

Index文档

Index与Create不同之处:如果文档不存在,就索引新的文档。否则现有文档会被删除,新的文档被索引。版本信息+1。
PUT users/_doc/1
{
“tags”:[“guitar”,“reading”]
}

Update文档

Update文档不会删除原来的文档,而是实现真正的数据更新
Post方法/Payload需要包含在“doc”中
POST users/_update/1
{
“doc”:{
“albums”:[“Album1”,“Album2”]
}
}

Bulk API

思想:在一次REST请求中,执行对不同索引的多次操作
支持四种类型操作:Index、Create、Update、Delete
可以在URI中指定Index,也可以在请求的Payload中进行
操作中单条操作失败,并不会影响其他操作
返回结果中包括了每一条操作执行的结果
在这里插入图片描述

批量读取 -mget

通过一次REST请求,将所需文档都返回
在这里插入图片描述
在这里插入图片描述

批量查询 -msearch

在这里插入图片描述

常用错误返回

在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐