Elasticsearch API(二)

news2024/10/7 14:32:52

文章目录

  • 前言
  • 一、Elasticsearch指标
    • ES支持的搜索类型
    • ES的能力
    • ES的写入实时性
    • ES不支持事务
  • 二、Elasticsearch名词
    • 节点(Node)
    • 角色(Roles)
    • 索引(index)
    • 文档(document)
  • 三、Elasticsearch集群核心配置
  • 四、Elasticsearch集群健康值
  • 五、Elasticsearch故障诊断
    • Cat API
    • Cluster API
  • 六、Elasticsearch分片
    • 概念
    • 种类
    • 作用及意义
    • 分片基本策略
  • 四、Elasticsearch API
    • 查看ES信息请求
    • Search API(查询)
    • Index API(创建)
    • settings API(更新)
    • 删除索引
    • 索引不可变性
    • Reindex API(重建文档)
    • Document API
      • 文档操作类型
      • create
      • index
    • Source API
    • Update API(字段部分更新)
    • Mget API(批量查询)
    • Bulk API(批量更新)
    • Delete_by_query API(条件执行)
  • 总结


前言

本文记录ES的名词、配置、API等的介绍。


一、Elasticsearch指标

ES支持的搜索类型

  • 结构化搜索

能预先确定数据的结构。

  • 非结构化搜索

无法确定数据的结构,如文档、html等。

  • 文本搜索
  • 地理位置搜索

半径查找、矩形查找、空间查找等

ES的能力

ES最擅长从海量数据中检索少量相关数据,但不擅长单次查询大量数据。

ES的写入实时性

ES是OLAP系统,侧重于海量数据的检索,而写入实时性并不是很高,默认1秒,1秒是ES缓冲区Buffer的刷新间隔时间。

ES是以写入实时性去换取数据检索的性能

ES不支持事务

ES写入实时性不高,对于数据保持强一致性的场景并不适用,需要具有ACID特性的数据库来支持,如MYSQL。

二、Elasticsearch名词

节点(Node)

一个节点就是一个ES实例,是一个ES进程。


角色(Roles)

角色是节点的重要属性。

常见的角色有:

  • 主节点(active master)
    活跃的主节点,是对集群的管理,消耗资源的任务不适合主节点允许。尽可能避免主节点不可用状态。
  • 候选节点(master-eligible)
    当主节点发生故障时,参与选举,是主节点的替代节点
  • 数据节点(data node)
    用于处理任务的节点,包括CURD、搜索和聚合
  • 预处理节点(ingest node)
    用于数据写入前的预操作,可过滤一些写入ES的垃圾数据。

ES共有11个角色

ES节点角色

具体可查看ES官方文档


角色配置

对节点的角色配置,可区分不同节点功能

在没有配置节点配置时,默认拥有全部角色

node.roles: [角色1, 角色2, ...]

索引(index)

在ES中的索引类似于MYSQL的表,并不是用来快速查询的数据结构。

使用Kibana中新建索引

## 索引规范
## 字母全部小写
## 多个单词用下划线,不使用驼峰或帕斯卡 text_index
PUT product

索引组成部分

索引组成

  • aliases
    索引别名
  • mappings
    索引设置,如分片和副本数量
  • settings
    映射,定义索引中包含哪些字段,以及字段长度、类似、分词器等。

文档(document)

相当于MYSQL中一条数据,因为ES中数据是以JSON格式储存的。

创建一个文档

http://192.168.8.125:9200/product/_doc/1

其中product为索引,_doc为类型,在7版本以后没有类型的概念,也就是索引下类型唯一,1为文档id。

创建返回`


三、Elasticsearch集群核心配置

  • network.host
    提供服务的ip地址,一般配置为本节点所在服务器的内网地址,此配置会导致节点由开发模式转为生产模式,从而触发引导检查
  • network_publish_host
    提供服务的ip地址,一般配置为本节点所在服务器的公网地址
  • http.port
    服务端口号,默认9200。通常范围为9200-9299
  • transport.port
    节点通信端口。默认9300,通常范围为9300-9399
  • dicovery.seed_hosts
    提供集群中其它候选节点列表,并且可能处于活动状态且可联系以播种发现过程。每个地址可以是ip地址,也可以时通过DNS解析为一个或多个IP地址的主机名。
  • cluster_initial_master_nodes
    指定集群初次选举中用到的候选节点,称为集群引导,只在第一次形成集群时需要,如果配置了network.host,则此配置项必须配置。重新启动节点或将新节点添加到现有集群时不需要使用此设置。

四、Elasticsearch集群健康值

  • 绿色
    所有分片可用
  • 黄色
    至少有一个副本不可用,但是所有主分片都可用。能完成完整的读写服务,但是可用性较低
  • 红色
    至少有一个主分片不可用,数据不完整,此时集群无法完成完整的读写服务,集群不可用

五、Elasticsearch故障诊断

Cat API

  • _cat/indices?health=yellow&v=true
    查看当前集群中的所有索引
  • _cat/health?v=true
    查看健康状态
  • _cat/nodeattrs
    查看节点属性
  • _cat/nodes?v
    查看集群中的节点
  • _cat/shards
    查看集群中所有分片的分配情况

Cluster API

  • _cluster/allocation/explain
    可用于诊断分片未分配原因
  • _cluster/health/ < target >
    检查集群状态

六、Elasticsearch分片

概念

分片就是将索引分成若干块,而且分片是无限复制的

种类

  • 主分片(primary shard)
  • 副本分片(replica shard)

作用及意义

  • 高可用性:提高分布式服务的高可用性
  • 提高性能:提供系统服务的吞吐量和并发响应的能力
  • 易扩展性:当集群的性能不满足业务要求时,可以方便快速的扩容集群,而无需停止服务

分片基本策略

  • 一个索引包含一个或多个分片,默认一个主分片,副本可以修改数量,主分片不可以。
  • 每一个分片都是Lucene实例,有完整的创建按索引和处理请求的能力
  • ES会自动在nodes上做分片均衡
  • 一个doc不可能同时存在于多个主分片中,但是当每个主分片的副本数量不为一时,可以同时存在于多个副本中。
  • 主分片和副本分片不能存在于同一个节点上
  • 完全相同的副本 不能同时存在于同一个节点上

四、Elasticsearch API

查看ES信息请求

  • 查看ES信息
http://192.168.8.125:9200

ES信息


  • 查看ES节点信息
http://192.168.8.125:9200/_cat/nodes

节点信息


  • 查看ES健康状态
http://192.168.8.125:9200/_cat/health

ES健康状态


  • 查看ES主节点
http://192.168.8.125:9200/_cat/master

主节点


  • 查看ES所有索引
http://192.168.8.125:9200/_cat/indices

ES索引

Search API(查询)

语法 GET请求

http://192.168.8.125:9200/_search

http://192.168.8.125:9200/<索引名>/_search

可选参数:

  • size :数据长度
  • from :从第几条开始
  • timeout:超时时间

Index API(创建)

创建语法 PUT请求

http://192.168.8.125:9200/<索引名称>

可选参数:

{
  "aliases": {
    "NAME": {}
  },
  "mappings": {},
  "settings": {
    "number_of_shards": 1, #主分片数量
    "number_of_replicas": 1  #每个主分片副分片数量
    ...
  }
}

settings API(更新)

更新settings语法 PUT请求

http://192.168.8.125:9200/index_text/_settings

可选参数:

{
  "number_of_replicas": 3
  ...
}

删除索引

删除语法 DELETE请求

http://192.168.8.125:9200/index_text

索引不可变性

索引创建成功后,以下属性不可变

  • 索引名称
  • 主分片数量
  • 字段类型

Reindex API(重建文档)

重建语法 POST请求

http://192.168.8.125:9200/_reindex

可选参数:

{
  "source": {
    "index": "text_index"
  },
  "dest": {
    "index": "text_index_new"
  }
}

只复制数据,不复制结构


Document API

文档操作类型

  • index:索引,可以创建,也可以全量替换(会将数据体内所有都替换)
  • create:不存在则创建,存在则报错

以上操作为写操作,均发生在Primary Shard(主分片),当操作对象为数据流时,op_type必须为 create

create

在text_create索引下以create方式插入一条id为1内容是个JSON字符串的文档

PUT text_create/_doc/1?op_type=create
{
  "name":"smz"
}PUT text_create/_create/1
{
  "name":"smz"
}

第一次则成功创建

{
  "_index": "text_create",
  "_id": "1",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

如果存在则报错

{
  "error": {
    "root_cause": [
      {
        "type": "version_conflict_engine_exception",
        "reason": "[1]: version conflict, document already exists (current version [1])",
        "index_uuid": "CF5tWqwITRG1Lk77yHJELw",
        "shard": "0",
        "index": "text_create"
      }
    ],
    "type": "version_conflict_engine_exception",
    "reason": "[1]: version conflict, document already exists (current version [1])",
    "index_uuid": "CF5tWqwITRG1Lk77yHJELw",
    "shard": "0",
    "index": "text_create"
  },
  "status": 409
}

index

在text_create索引下以index方式插入一条id为1内容是个JSON字符串的文档

PUT text_create/_doc/1?op_type=index
{
  "name":"smz"
}

第一次则成功创建

{
  "_index": "text_create",
  "_id": "2",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 1,
  "_primary_term": 1
}

如果存在则全量覆盖

{
  "_index": "text_create",
  "_id": "2",
  "_version": 2,
  "result": "updated",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 2,
  "_primary_term": 1
}

不指定id则系统自动生成,且该方法只能使用POST请求


Source API

该API查出来的数据只会查出源字段,不会查出元字段(系统字段)。

语法如下

GET text_create/_source/1
{
  "name": "smz"
}

与_doc API组合

GET text_create/_doc/1?_source=false

{
  "_index": "text_create",
  "_id": "1",
  "_version": 1,
  "_seq_no": 0,
  "_primary_term": 1,
  "found": true
}

GET text_create/_doc/1?_source=true

{
  "_index": "text_create",
  "_id": "1",
  "_version": 1,
  "_seq_no": 0,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "name": "smz"
  }
}


Update API(字段部分更新)

在更新操作时会使源数据字段全都呗覆盖,所以采用update API来处理更新某个字段

语法如下

POST text_create/_update/1
{
  "doc": {
    "name":"smz2"
  }
}

Mget API(批量查询)

批量查询出符合条件的,可以跨索引。

语法如下

GET _mget
{
  "docs": [
    {
      "_index": "product",
      "_id": "1"
    },
    {
      "_index": "text_create",
      "_id": "1"
    }
    ]
}
GET text_create/_mget
{
  "docs": [
    {
      "_id": "1"
    },
    {
      "_id": "2"
    }
    ]
}
GET text_create/_mget
{
  "ids": [
    1,
    2
    ]
}

Bulk API(批量更新)

必须为两行形式,第一行为操作对应的对象,第二行为操作内容

批量添加,create可以更换为index,与上文单独一条添加的效果一样。

语法如下

POST _bulk
{"create":{"_index":"text_create","_id":"1"}}
{ "name":"smz2"}
{"create":{"_index":"text_create","_id":"2"}}
{ "name":"smz2"}
{"create":{"_index":"text_create","_id":"3"}}
{ "name":"smz2"}

批量更新。

POST text_create/_bulk
{"update":{"_id":"1"}}
{"doc":{"name": "smz_bulk"}}
{"update":{"_id":"2"}}
{"doc":{"name": "smz_bulk"}}

批量删除。

POST _bulk
{"delete":{"_index": "text_create","_id":"3"}}
{"delete":{"_index": "text_create","_id":"2"}}

Delete_by_query API(条件执行)

该API可以根据不同条件来执行操作。

语法如下

POST text_create/_delete_by_query
{
  "query": {
    ...
  }
}

总结

本文记录ES的名词、配置、API的基本用法等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

126.【Redis 二刷】

Redis 二刷 (一)、认识NoSQL 与 SQL1.NoSQL与SQL的区别 (二)、认识Redis1.Redis 特征2.Redis安装及启动的三种方式 (基于Window)(1).命令行配置文件 3.Redis 客户端(1).命令行客户端(2).Redis可视化客户端 4.Redis 数据结构(1).Redis 通用命令(2).String 类型(3).Redis 的Key层…

【C++】list 模拟笔记

文章目录 list定义结点类&#xff08;list_node&#xff09;为什么封装迭代器为类 &#xff1f;库里面模板多参数的由来 &#xff1f;为什么普通迭代器不能隐式类型转换成const迭代器&#xff1f;迭代器位置指向及其返回值和整体代码 list list 和前面学习的 string 和 vector …

SAP HANA数据库学习

Systems介绍&#xff1a; Catalog下面存HANA的 Schema。 Content下面建package来 放view 。 Provisioning可以建虚拟表 数据源啥的。 Security下面 是用户角色和权限。 一个calculation view里面的scenario场景下都有啥呢&#xff1f; 首先是semantics下面的节点&#xff0…

跨网段耦合器的作用

你是否曾经遇到过需要跨网段访问设备的问题&#xff1f;比如在工业自动化领域&#xff0c;PLC和数控设备的连接。这时候&#xff0c;远创智控YC8000-NAT就能帮你轻松解决。 1, 远创智控YC8000-NAT是一款功能强大的设备&#xff0c;它可以将LAN1口所连接PLC的IP地址和端口号&a…

MySQL多版本并发控制原理(MVCC)

在数据库系统中&#xff0c;事务是指由一系列数据库操作组成的一个完整的逻辑过程&#xff0c;事务的基本特性是ACID&#xff1a; A : Atomicity (原子性) C: Consistency (一致性) I: Isolation (隔离性) D: 持久性&#xff08;Durability&#xff09; 由于大部分数据库都是高…

听GPT 讲K8s源代码--pkg(五)

在 Kubernetes 中&#xff0c;kubelet 是运行在每个节点上的主要组件之一&#xff0c;它负责管理节点上的容器&#xff0c;并与 Kubernetes 控制平面交互以确保容器在集群中按照期望的方式运行。kubelet 的代码位于 Kubernetes 代码库的 pkg/kubelet 目录下。 pkg/kubelet 目录…

档案数字化扫描完成标准有哪些内容?

档案数字化扫描完成标准是指在进行数字化扫描即将纸质文档或图片等非数字化文件转化为数字格式的文件的过程中&#xff0c;要满足一系列严格的要求。 1.扫描速度快。由于档案数量庞大&#xff0c;数字化扫描需要快速高效地进行&#xff0c;因此需要采用高效的扫描设备和软件&am…

函数-嵌入式C语言

函数-嵌入式C语言 值传递 地址传递

基于C语言的科学计算器

完整资料进入【数字空间】查看——baidu搜索"writebug" 一、产品概述 计算器&#xff1a; 它是一个拥有扁平化优雅用户界面的科学计算器&#xff0c;拥有科学计算与基础计算器功能&#xff0c;可以计算是是数学表达式&#xff1a;从一个简单的表达式&#xff0c;如…

postgresql源码学习(58)—— 删除or重命名WAL日志?这是一个问题

最近因为WAL日志重命名踩到大坑&#xff0c;一直很纠结WAL日志在什么情况下会被删除&#xff0c;什么情况下会被重命名&#xff0c;钻研一下这个部分。 一、 准备工作 1. 主要函数调用栈 首先无用WAL日志的清理发生检查点执行时&#xff0c;检查点执行核心函数为CreateCheckPo…

96、Kafka中Zookeeper的作用

Kafka中zk的作用 它是一个分布式协调框架。很好的将消息生产、消息存储、消息消费的过程结合在一起。在典型的Kafka集群中, Kafka通过Zookeeper管理集群配置&#xff0c;选举leader&#xff0c;以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到…

PyQt5:使用PyQtWebEngine

1. PyQt 5.13.0 1.1 安装PyQt pip install PyQt55.13.0 -i https://pypi.tuna.tsinghua.edu.cn/simple1.2 安装PyQtWebEngine pip install PyQtWebEngine5.13.0 -i https://pypi.tuna.tsinghua.edu.cn/simplepip list 1.3 测试 python文件 import sys from PyQt5.QtCore imp…

ARM——点灯实验

循环点灯 RCC寄存器使能GPIOE、GPIOF组寄存器 修改GPIOx组寄存器下的值 通过GPIOx_MODER寄存器设置为输出模式通过GPIOx_OTYOER寄存器设置为推挽输出类型通过GPIOx_OSPEEDR寄存器设置为低速输出通过GPIOx_PUPDR寄存器设置为禁止上下拉电阻点灯 通过GPIOx_ODR寄存器设置为高电…

day33哈希表

1.哈希表 常见的哈希表分为三类&#xff0c;数组&#xff0c;set&#xff0c;map&#xff0c;C语言的话是不是只能用数组和 2.例题 题目一&#xff1a; 分析&#xff1a;题目就是判断两个字符串出现的次数是否相同&#xff1b; 1&#xff09;哈希表26个小写字母次数初始化为0&…

K8S初级入门系列之一-概述

一、前言 K8S经过多年的发展&#xff0c;构建了云原生的基石&#xff0c;成为了云原生时代的统治者。我将用三个博客系列全面&#xff0c;循序渐进的介绍K8S相关知识。 初级入门系列&#xff0c;主要针对K8S初学者&#xff0c;以及希望对K8S有所了解的研发人员&#xff0c;重点…

【贪心算法part05】| 435.无重叠区间、763.划分字母区间、56.合并区间

目录 &#x1f388;LeetCode435. 无重叠区间 &#x1f388;LeetCode763.划分字母区间 &#x1f388;LeetCode 56.合并区间 &#x1f388;LeetCode435. 无重叠区间 链接&#xff1a;435.无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, …

【雕爷学编程】Arduino动手做(55)--DHT11温湿度传感器模块3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

力扣C++|一题多解之数学题专场(2)

目录 50. Pow(x, n) 60. 排列序列 66. 加一 67. 二进制求和 69. x 的平方根 50. Pow(x, n) 实现 pow(x,n)&#xff0c;即计算 x 的 n 次幂函数&#xff08;即x^n&#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例…

【SQL应知应会】表分区(五)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分区表 • MySQL版 前言一、分区表1.非分区表2.分区…

day42-servlet下拉查询/单例模式

0目录 1.Servlet实现下拉查询&#xff08;两表&#xff09; 2.单例模式 1.实战 1.1 创建工程&#xff0c;准备环境... 1.2 接口 1.3 重写方法 1.4 servlet 1.5 list.jsp list.jsp详解 2.单例模式 2.1 饿汉模式&#xff1a;在程序加载时直接创建对象&#…