Elasticsearch的一些基本概念

文章目录

  • 基本概念:文档和索引
    • JSON文档
    • 元数据
    • 索引
    • REST API
  • 节点和集群
    • 节点
      • Master eligible节点和Master节点
      • Data Node 和 Coordinating Node
      • 其它节点
  • 分片(Primary Shard & Replica Shard)
    • 分片的设定
    • 操作命令

基本概念:文档和索引

Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位。

  • 文档会被序列化成JSON格式,保存在Elasticsearch中。
  • JSON对象由字段组成,每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围类型)。
  • 每个文档都有一个UniqueID,你可以自己指定ID,或者通过Elasticsearch自动生成。

JSON文档

一篇文档包含了一系列的字段,类似数据库表中一条记录,字段的类型可以指定或者通过Elasticsearch自动推算,支持数组,支持嵌套。
在这里插入图片描述

元数据

每一个文档都有一个元数据,元数据是用于标注文档的相关信息的。

  • _index: 文档所属的索引名
  • _type:文档所属的类型名
  • _id:文档唯一ld
  • _source:文档的原始Json数据
  • _all:整合所有字段内容到该字段,7.0版本已被废除
  • _version:文档的版本信息
  • _score:相关性打分
    在这里插入图片描述

索引

索引(Index)是文档的容器,是一类文档的结合。

  • Index体现了逻辑空间的概念:每个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型;
  • Shard体现了物理空间的概念:索引中的数据分散在Shard上
  • 索引的 Mapping定义文档字段的类型,Setting定义不同的数据分布
    在这里插入图片描述
{
  "settings": {
    "index": {
      "creation_date": "1690724511450",
      "number_of_shards": "1",
      "number_of_replicas": "1",
      "uuid": "fl-Kf7M9TiiEpFPfAT6Iew",
      "version": {
        "created": "7010099"
      },
      "provided_name": "movies"
    }
  }

REST API

补充:kibana显示中文界面,打开 kibana/config/kibana.yml,最后一行写入 i18n.locale: “zh-CN”,然后重新启动kibana

进入Kibana页面–>开发工具–>console:
在这里插入图片描述

//查看索引信息
GET kibana_sample_data_ecommerce

//查看索引的文档总数
GET kibana_sample_data_ecommerce/_count

//_cat相关
//根据索引名称关键词通配符查询
GET /_cat/indices/kibana*?&s=index

//按照文档个数排序
GET /_cat/indices?v&s=docs.count:desc

//查看状态为green的索引
GET /_cat/indices?v&health=green

//查看每个索引占用的内存
GET /_cat/indices?v&h=i,tm&s=tm:desc

节点和集群

Elasticsearch分布式系统的高可用性和可扩展性:

  • 服务可用性-允许有节点停止服务
  • 数据可用性-部分节点丢失,不会丢失数据
  • 请求量提升/数据的不断增长(将数据分布到所有节点上)

Elasticsearch分布式架构的特点

  • 存储的水平扩容
  • 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
  • 不同的集群通过不同的名字来区分,默认名字“elasticsearch”,也可以通过配置文件修改,或者在命令行中-E cluster.name=geektime进行设定
  • 一个集群可以有一个或者多个节点

节点

  • 节点是一个 Elasticsearch的实例,其本质上就是一个 JAVA进程,一台机器 上可以运行多个Elasticsearch进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例;
  • 每一个节点都有名字, 通过配置文件配置,或者启动时候 -E node.name=node1 指定。每一个节点在启动之后,会分配一个UID,保存在data目录下。

Master eligible节点和Master节点

  • 每个节点启动后,默认就是一个Master eligible节点(可以通过设置node.master: false 禁止)
  • Master-eligible节点可以参加选主流程,成为Master 节点;当第一个节点启动时候,它会将自己选举成Master节点。
  • 每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息。
  • 集群状态(Cluster State) 维护了一个集群中必要的信息,包括:所有的节点信息、所有的索引和其相关的Mapping与Setting 信息、分片的路由信息。任意节点都能修改信息会导致数据的不一致性。

Data Node 和 Coordinating Node

  • 可以保存数据的节点,叫做Data Node,负责保存分片数据,在数据扩展上起到了至关重要的作用。
  • Coordinating Node:负责接受Client的请求,将请求分发到合适的节点,最终把结果汇集到一起;每个节点默认都起到了Coordinating Node的职责。

其它节点

  • Hot & Warm Node:不同硬件配置的Data Node, 用来实现Hot & Warm架构,降低集群部署的成本
  • Machine L earning Node:负责跑机器学习的Job,用来做异常检测
    *Tribe Node:(5.3开始使用Cross Cluster Serarch) Tribe Node连接到不同的Elasticsearch集群,并且支持将这些集群当成一个单独的集群处理

分片(Primary Shard & Replica Shard)

  • 主分片,用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上。一个分片是一个运行的Lucene的实例。主分片数在索引|创建时指定,后续不允许修改,除非Reindex。
  • 副本用以解决数据高可用的问题。分片是主分片的拷贝副本分片数,可以动态地调整。增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)

分片的设定

  • 对于生产环境中分片的设定,需要提前做好容量规划。如果分片数设置过小,导致后续无法增加节点实现水品扩展;如果单个分片的数据量太大,导致数据重新分配耗时。
  • 分片数设置过大,7.0开始,默认主分片设置成1, 解决了over-sharding的问题,影响搜索结果的相关性打分,影响统计结果的准确性;单个节点上过多的分片,会导致资源浪费,同时也会影响性能。

操作命令

通过 GET _cluster/health 可以查看集群的健康度
在这里插入图片描述
其中 status的含义如下:

  • Green- 主分片与副本都正常分配
  • Yellow -主分片全部正常分配,有副本分片未能正常分配
  • Red -有主分片未能分配例如,当服务器的磁盘容量超过85%时,去创建了一个新的索引
#查看健康度(按下Command+/可以跳转到官网查看详细用法)
GET _cluster/health

#查看node信息
GET _cat/nodes 

#查看shards信息
GET _cat/shards

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

顺序表(数据结构)

“路虽远,行则将至” ❤️主页:小赛毛 顺序表目录 1.线性表 2.顺序表 概念及结构 静态顺序表:使用定长数组存储元素。 动态顺序表:使用动态开辟的数组存储。 接口实现 1.线性表 线性表 ( linear list ) 是…

idea如何建立web项目???

我们需要用到tomcat,没有下在着小伙伴,可以借鉴这篇博客: 如何正确下载tomcat???_明天更新的博客-CSDN博客 1.建立普通的Java项目。 2.简单编写index.jsp文件 3.添加tomcat 4.运行服务器 5.构建Servlet 最后…

突破瓶颈,提升学习效率的考试培训系统

在现代社会中,教育和培训已经成为人们提升自我能力的重要途径。尤其在考试备考过程中,学习效率的提升显得尤为重要。为了帮助学习者突破学习瓶颈,提高学习效果,我们开发了一款全新的考试培训系统。 我们的系统为学习者提供了全方…

SpringBoot复习:(52)不再需要使用@EnableTransactionManagement的原因

在Spring项目中,要用事务,需要EnableTransactionManagement注解加Transactional注解。而在SpringBoot项目,有事务的自动配置类TransactionAutoConfiguration,代码如下: 可以在其内部类EnableTransactionManagementConfiguratio…

651页23万字智慧教育大数据信息化顶层设计及建设方案WORD

导读:原文《651页23万字智慧教育大数据信息化顶层设计及建设方案WORD》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 目录 一、 方案背景 1.1 以教育…

电动汽车太秀了!用一个技巧搞定了蓄电池!

当涉及能源存储和供应,特别是在太阳能、电动车和不间断电源等领域,蓄电池无疑是关键的组成部分。然而,蓄电池的状态、性能和健康状况对于系统的可靠性和效率至关重要。 蓄电池监控通过实时监测、数据分析和预警功能,它提供了更高效…

React 全栈体系(二)

第二章 React面向组件编程 一、基本理解和使用 1. 使用React开发者工具调试 2. 效果 2.1 函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>1_函数式组件</title> </head> &l…

Docker、Linux网络代理设置

网络代理 linux机器通过windows主机代理访问外网 windows机器借用 CCProxy 软件&#xff0c;官网下载免费版(http://www.ccproxy.com/) CCProxy 默认使用808端口&#xff0c;如果端口冲突可以在设置处修改 在帐号处添加允许的linux机器ip&#xff0c;也可以直接允许所有ip,其…

JVM——类文件结构

文章目录 一 概述二 Class 文件结构总结2.1 魔数2.2 Class 文件版本2.3 常量池2.4 访问标志2.5 当前类索引,父类索引与接口索引集合2.6 字段表集合2.7 方法表集合2.8 属性表集合 一 概述 在 Java 中&#xff0c;JVM 可以理解的代码就叫做字节码&#xff08;即扩展名为 .class …

K8S系列二:实战入门

写在前面 本文是K8S系列第二篇&#xff0c;主要面向对K8S新手同学&#xff0c;阅读本文需要读者对K8S的基本概念&#xff0c;比如Pod、Deployment、Service、Namespace等基础概念有所了解。尚且不熟悉的同学推荐先阅读本系列的第一篇文章&#xff1a;《K8S系列一&#xff1a;概…

vue常识

vue是一套用于构建用户界面的渐进式框架,vue的核心库只关注视图层 1.声明式框架 ● 早在jquery的时期,编写代码都是命令式的,命令式框架的特点就是关注过程 ● 声明式框架更加注重结果,命令式的代码封装到了vue.js中,过程靠vue.js来实现 声明式代码更加简单,不需要关注实现,…

屏蔽socket 实例化时,握手阶段报错信息WebSocket connection to ‘***‘ failed

事情起因是这样的&#xff1a; 我们网站是需要socket链接实行实时推送服务&#xff0c;有恶意竞争对手通过抓包或者断网&#xff0c;获取到了我们的socket链接地址&#xff0c;那么他就可以通过java写一个脚本无限链接这个socket地址。形成dos攻击。使socket服务器资源耗尽&…

寻路算法小游戏

寻路算法小demo 寻路算法有两种&#xff0c;一种是dfs 深度优先算法&#xff0c;一种是 dfs 深度优先算法 深度优先搜索的步骤分为 1.递归下去 2.回溯上来。顾名思义&#xff0c;深度优先&#xff0c;则是以深度为准则&#xff0c;先一条路走到底&#xff0c;直到达到目标。这…

numpy与matplotlib 常用日常代码

matplotlab 和 numpy 可能是python 数据处理工作中用的最多的库了&#xff0c; 官网的文档十分详细&#xff0c;但是就是因为数量庞大&#xff0c;很多时候常用的功能和生僻冷门的功能混在一起&#xff0c;找不到重点。按照二八原则&#xff0c;掌握20%的功能就已经能应付绝大多…

python爬虫——爬取天气预报信息

在本文中&#xff0c;我们将学习如何使用代理IP爬取天气预报信息。我们将使用 Python 编写程序&#xff0c;并使用 requests 和 BeautifulSoup 库来获取和解析 HTML。此外&#xff0c;我们还将使用代理服务器来隐藏我们的 IP 地址&#xff0c;以避免被目标网站封禁。 1. 安装必…

vue上传图片并修改png图片颜色

场景 当涉及到在 Vue 中上传图片并修改 PNG 图片的颜色时&#xff0c;这个任务涵盖了文件上传、图像处理、Canvas 操作等多个方面 在现代 Web 开发中&#xff0c;图片的处理是常见的需求之一。本文将带您深入探讨如何使用 Vue.js 来实现图片上传&#xff0c;并在客户端使用 Can…

小航助学Python编程NOC模拟卷(第1套)(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

【springboot】mongoTemplate增删改查操作

目录 一、代码示例1.1 pom依赖1.2 application配置1.3 controller1.4 service 二、截图示例2.1 新增2.2 修改2.3 详情2.4 分页2.5 删除 一、代码示例 1.1 pom依赖 <!-- mongodb --> <dependency><groupId>org.springframework.boot</groupId><art…

如何批量修改图片名为不同名称

如何批量修改图片名为不同名称&#xff1f;当今社会&#xff0c;因为人们都养成了随手拍照的习惯&#xff0c;所以拥有上千上万张照片的相册已经司空见惯不足为奇。然而&#xff0c;我们在保存这些照片时往往都会碰到一个大难题——电脑中的图片名称千奇百怪&#xff0c;让整个…

STM32 printf函数

printf函数输出流程 用户调用printf()函数到C标准库调用printf函数相关部分&#xff0c;printf函数由编译器提供的stdio.h解析。包含在usart.h文件中。fputc()最终实现输出。用户需要根据最终输出的硬件重新定义该函数&#xff0c;此过程为&#xff1a;printf重定向。 printf的…