Elasticsearch的一些基本概念

2023-11-08

基本概念:文档和索引

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch的一些基本概念 的相关文章

随机推荐

  • 操作系统 第七章 文件管理

    从用户的观点看 操作系统中引入文件系统的目的是 D A 实现虚拟存储 B 保存用户和系统文档及数据 C 保护用户数据 D 实现对文件的按名存取 文件系统中 文件访问控制信息存储的合理位置是 A A 文件控制块 B 系统注册表 C 文件分配表
  • C#编写的基于VLC的播放器

    首先看一下最终的程序效果 实现的功能 1 打开播放的音视频文件 1 菜单栏 文件 gt 打开 2 工具栏 下面 打开 3 播放器右键 gt 打开 2 暂停 继续播放 停止音视频文件 3 进度条和右下角文本框显示播放进度 4 拖动进度条对视频
  • 【牛客SQL】SQL29 使用join查询方式找出没有分类的电影id以及名称

    题目描述 题解 子查询 NOT IN 判断 JOIN 运行时间 18ms 超过47 56 用Sqlite提交的代码 占用内存 3588KB 超过10 01 用Sqlite提交的代码 SELECT film id title FROM fil
  • BERTopic

    论文标题 BERTopic Neural topic modeling with a class based TF IDF procedure 论文作者 Maarten Grootendorst 论文链接 https arxiv org p
  • vue 引入weixin-js-sdk报错: import wx from ‘weixin-js-sdk‘ wx=‘undefined‘

    vue 中通过 npm 引入 weixin js sdk 使用 wx config 时报错了 c0e6 189 Uncaught in promise TypeError Cannot read property config of und
  • 分支限界法解作业分配问题的实现(C++)

    include
  • Mac版本的After Effects 2023中英文切换方法

    打开ae模板会发现有许多系统的表达式错误 这些错误时由于系统语言不通导致的 只要更改下ae界面语言即可 那么如何将中文版的After Effects 2023 Mac版切换成英文版呢 新版本已经不能通过首选项更改语言设置了 要从applic
  • 国内直接下载google play谷歌商店apk安装包的网站【https://apkpure.com/】

    https apkpure com 这里可以直接下载google play 谷歌商店中的app
  • RedisTemplate使用最详解(一)--- opsForValue()

    1 set K var1 V var2 新增一个字符串类型的值 var1是key var2是值 key存在就覆盖 不存在新增 redisTemplate opsForValue set BBB 你好 2 set K key V value
  • $Luogu[P3673]$小清新计数题

    这他妈什么玩意儿 这里是可爱的链接菌 转化模型 对于第 i 句话 第 p 句话为真话 将 i p 连一条白边 第 p 句话为假话 将 i p 连一条黑边 显然我们的图会是一片基环树森林 并且边为无向边 白边连的两点真假相同 黑边相反 那么要
  • python存csv中文乱码问题

    这两天做了一个小测试是抓的天气信息本来想存数据库 后来觉得还是存csv比较好 使用方便 但是在使用的过程中 发现存中文的时候会出现乱码的情况 查了一下资料 跟大家分享一下python3中存csv乱码的问题 亲测在python2中是不能设置这
  • Linux脚本- 将当前文件夹以及所有子文件夹下的所有.cpp文件,拷贝到指定文件路径下

    需求 将当前文件夹以及所有子文件夹下的所有 cpp文件 拷贝到指定文件路径 home majn llvm project llvm cpp test suite下 以下是一个用于实现该功能的 Bash 脚本 它会递归地查找当前文件夹和所有子
  • mpvue 未找到入口 app.json 文件

    从网上下了个mpvue的程序下来 说是直接用微信打开目录就ok了 但是打开之后发现编译直接出错了 说 未找到入口 app json 文件 懵逼啊 原来要先运行 npm intall 安装依赖包 然后再运行 npm run dev 执行一下m
  • SQL Server数据导入导出工具BCP详解

    bcp是SQL Server中负责导入导出数据的一个命令行工具 它是基于DB Library的 并且能以并行的方式高效地导入导出大批量的数据 bcp可以将数据库的表或视图直接导出 也能通过SELECT FROM语句对表或视图进行过滤后导出
  • 磁盘分区基础和LINUX上硬盘分区设备号解释

    现在就开始讲讲分区 先明确一下概念 主分区 一块物理硬盘上可以被独立使用的一部分 一个硬盘最多可以有4个主分区 扩展分区 为了突破一个物理硬盘只能有4个分区的限制 引入了扩展分区 扩展分区和主分区的地位相当 但是扩展分区本身不能被直接使用
  • linux之getopt 函数

    命令行参数解析函数 getopt getopt 函数声明如下 include
  • mysql日期相减取小时

    mysql日期相减取小时 TIMESTAMPDIFF HOUR a StartTime a EndTime 转载于 https www cnblogs com penghq p 8657064 html
  • 各国语言对应翻译表

    为了工作方便 自己做了一个地区语言的英文翻译 让自己可以更快的找到自己需要的地方 同时 分享给大家 谢谢 中文 各国语言 翻译 序号 中文 翻译 1 阿尔巴尼亚语 2 阿拉伯语 3 阿姆哈拉语 4 阿塞拜疆语 Az rbaycan 5 爱尔
  • 本地springboot项目上传到gitee

    1 在gitee上新建一个仓库 创建后可以拿到仓库地址 https gitee com ouyangshuiming linux test git 2 选中 创建git仓库 3 4 最后一步 一定记得这里要写上一段话 才能成功提交 比如gi
  • Elasticsearch的一些基本概念

    文章目录 基本概念 文档和索引 JSON文档 元数据 索引 REST API 节点和集群 节点 Master eligible节点和Master节点 Data Node 和 Coordinating Node 其它节点 分片 Primary