ES 之索引和文档

news2025/2/27 10:29:32

本文主要介绍ES中的数据组成结构单元。

一、文档(Document)

1、概念

  1. ES的数据存储单元是面向文档的,文档是所有数据存储,搜索的最小单元。
    你可以把ES中的文档对应成mysql中的一条条数据记录。到时候你存进ES的数据就是一个个文档。

  2. 文档存入ES是序列化成为JSON格式的。
    众所周知,json对象是由字段组成的。
    每个字段都有对应的字段类型,包括字符串,数字,布尔,日期,二进制,范围类型。

  3. 每个文档都有一个Unique ID,也就是唯一标识,可以对应Mysql表中的主键。
    ES中这个ID可以自己指定,也可以由ES自动生成。我们上一篇导入logstash配置的时候那个id就是指定的唯一标识键。

2、数据结构

一个JSON文档包含了一系列的字段,类似数据库中表的各个字段属性列。
JSON文档的格式灵活,不需要你强制的预先定义格式。

其中字段的类型可以人为指定,或者是通过ES自动推算。
支持数组格式,支持数据的嵌套。

3、文档的元数据

随便去Kibana中查一个数据如下:

 {
        "_index" : "movies",
        "_type" : "_doc",
        "_id" : "5233",
        "_score" : 1.0,
        "_source" : {
          "@version" : "1",
          "title" : "Road to Utopia",
          "id" : "5233",
          "year" : 1946,
          "genre" : [
            "Comedy"
          ]
        }
 }

我们看到有这么几个东西组成:这几个组成就是文档的一个元数据。

  1. _index:表示这个文档数据属于哪个索引,文档存储的地方
  2. _type:表示文档所属的类型,类型7.0基本没意义了,都是_doc.文档代表的对象的类
  3. _id:表示这个文档的唯一标识,也就是上面说的类似主键。文档的唯一标识.id仅仅是一个字符串,它与_index和_type组合时,就可以在Elasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义_id,也可以让Elasticsearch帮你自动生成
  4. _score:表示这个文档在本次检索中的相关性打分,这个在全文检索中有重要作用。
  5. _source:这里面放的就是你文档的真实内容。就是那个json文档,文档中有一个@version是文档的版本,这个版本每次修改都会递增,利用这个可以做乐观锁,CAS在并发修改的时候控制线程安全。
    而且也看到文档json中有字符串,有时间,还有个数组。各种类型都有,json数据格式的灵活性得以展示。

二、索引(index)

1、概念介绍

索引是ElasticSearch存放数据的地方,可以理解为关系型数据库中的一个数据库。事实上,我们的数据被存储和索引在分片(shards)中,索引只是一个把一个或多个分片分组在一起的逻辑空间。然而,这只是一些内部细节——我们的程序完全不用关心分片。对于我们的程序而言,文档存储在索引(index)中。剩下的细节由Elasticsearch关心既可。(索引的名字必须是全部小写,不能以下划线开头,不能包含逗号)

先使用语句查看一下索引的结构。

在这里插入图片描述
我们看到这个索引的一个结构组成。

  • index也就是索引是文档的容器,是一类文档的集合。你可以理解为Mysql中的表这个概念。

    • 每个索引都有自己的一个mapping定义,用于定义包含文档的字段名和字段类型,你可以对应理解为mysql中的表结构定义。定义好文档字段的类型,名称。
    • shard体现的存储的维度,索引中的数据会分散在shard分片上。
  • 索引的Mapping和Settings

    • Mapping定义的是文档字段的类型,就像Mysql的字段类型。表结构。
    • Setting定义不同的数据分布,比如在那个分片,去哪个节点这种。后续看。

2. 语境理解

索引在不同的语境中是不同的意思。
在ES中当你说你索引一个文档,就是把这个文档插入ES。
当你说一个索引,那就是名词,就是一个索引结构。
在MYSQL中可能是B+树索引。ES中还有倒排索引。

3. 索引创建原则

类似的数据放在一个索引,非类似的数据放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品销售数据),inventory index(包含了所有库存相关的数据)。如果你把比如product,sales,human resource(employee),全都放在一个大的index里面,比如说company index,不合适的。
index中包含了很多类似的document:类似是什么意思,其实指的就是说,这些document的fields很大一部分是相同的,你说你放了3个document,每个document的fields都完全不一样,这就不是类似了,就不太适合放到一个index里面去了。
索引名称必须是小写的,不能用下划线开头,不能包含逗号:product,website,blog

三、Type(类型)

ES在7.0之前是有type这个概念的,一个Index可以设置多个types,那时候Index类似数据库,typel类似表,这个组成。
6.0开始的时候type就被逐步废弃。7.0开始,一个索引只有一个Type就是_doc,也就是一个库一个表,这时候库就是表了,这时候我们就说一个Index类似一个表。
此时es的结构和mysql的结构就可以用下面这个表格做对应理解,其实不是那么契合的。就是帮助理解而已。
在这里插入图片描述

四、索引 Rest Api

ES的检索提供了完整的rest的api调用来实现。
在这里插入图片描述

1. 查看索引的设置

GET /movies/_settings

在这里插入图片描述
在这个管理里面可以看到当前ES的所有的索引可以查看索引的详细信息。
在这里插入图片描述
点击索引进去看到详细信息。
在这里插入图片描述

2、索引操作 rest api

# 查询ES索引下的数据量
GET _cat/indices/movies?v

# 查询ES索引下的mapping关系
GET /movies/_mapping

# 查询ES当前环境下索引对应的数据量
GET _cat/indices?v

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

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

相关文章

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列未来多步预测(程序含详细预测步骤)

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列未来多步预测(程序含详细预测步骤) 目录 时序预测 | MATLAB实现GRNN广义回归神经网络时间序列未来多步预测(程序含详细预测步骤)预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现GRNN广义回归神经网络时间序列…

利用GraalVM将java文件变成exe可执行文件

上期文章已经配置好了环境:Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)-CSDN博客 在桌面上创建一个HelloWorld.java的文件。 public class HelloWorld{public static void main (String[] args){System.out.println("Hello,Wor…

二叉树及其实现

二叉树 一.树的概念及结构1.1树的概念1.2相关概念 2.二叉树的概念及结构2.1 概念2.2 特殊的二叉树 3.二叉树的遍历3.1 前序、中序以及后序遍历3.2 层序遍历3.3 判断二叉树是否是完全二叉树3.4 二叉树的高度3.5 二叉树的叶子节点个数3.6 二叉树的第k层的节点个数3.7 二叉树销毁3…

行为型设计模式——命令模式

命令模式 日常生活中,我们出去吃饭都会遇到下面的场景。 定义: 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。命…

【进程调度】基于优先级的轮转调度C++实现算法

一、简介 1.1 背景 在计算机科学领域,进程调度是操作系统中一个关键的组成部分,它负责协调系统中各个进程的执行顺序,以最大程度地提高系统资源利用率。在这篇博客中,将深入探讨基于优先级的轮转调度算法,该算法结合…

小白浅学Vue3

目录 前端环境 依赖管理NPM安装配置 创建Vue项目 模板语法 文本插值{{ }} v-html 属性绑定 条件渲染 v-if 、v-else-if 、v-else v-show 列表渲染v-for 状态管理 事件 事件 事件传参 事件修饰符 数组变化监听 计算属性 Class绑定 Style绑定 侦听器 v-mod…

Fastadmin上传图片服务端压缩图片,实测13.45M压缩为29.91K

先前条件:第一步安装compose,已安装忽略。 先上截图看效果 一、在fastadmin的根目录里面输入命令安装think-image composer require topthink/think-image二、找到公共上传类,application/common/library/Upload.php,在最下面…

【数据结构与算法】之数组系列-20240113

这里写目录标题 一、66. 加一二、121. 买卖股票的最佳时机三、136. 只出现一次的数字四、268. 丢失的数字五、350. 两个数组的交集 II 一、66. 加一 简单 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位&…

七:Day08_任务调度

第一章 定时任务概述 在项目中开发定时任务应该一种比较常见的需求,在 Java 中开发定时任务主要有三种解决方案:一是使用JDK 自带的 Timer,二是使用 Spring Task,三是使用第三方组件 Quartz。 建议: 单体项目架构使用…

Linux系统——远程访问及控制

目录 一、OpenSSH服务器 1.SSH(Secure Shell)协议 2.OpenSSH 2.SSH原理 2.1公钥传输原理 2.2加密原理 (1)对称加密 (2)非对称加密 2.3远程登录 2.3.1延伸 2.3.2登录用户 3.SSH格式及选项 3.1延…

K8s-Pod资源(一)Pod介绍、创建Pod、Pod简单资源配额

Pod概述 Kubernetes Pod | Kubernetes Pod是Kubernetes中的最小调度单元,k8s都是以pod的方式运行服务的 一个pod可以指定镜像,封装一个或多个容器 pod需要调度到工作节点运行,节点的选择由scheduler调度器实现 pod定义时,会…

【Python学习】Python学习17- File(文件) 方法

目录 [TOC](【Python学习】Python学习17- File(文件) 方法) 文章所属专区 Python学习 前言 本章节主要说明Python文件操作的具体说明 open()方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数&#…

C++ QtCreator启动执行报错的各类问题解决++持续更新!!

1.QTCreator启动报错"由于找不到 python310.dll" 在QtCreator加载自动缩进的LLVM插件后, 再次打开Qt时, 会报错找不到python310.dll 解决方法:下载python310.dll,随后复制到目录:C:\Program Files\LLVM\bin 即可解决该问题。下载路径附件如…

TensorRT(C++)基础代码解析

TensorRT(C)基础代码解析 文章目录 TensorRT(C)基础代码解析前言一、TensorRT工作流程二、C API2.1 构建阶段2.1.1 创建builder2.1.2 创建网络定义2.1.3 定义网络结构2.1.4 定义网络输入输出2.1.5 配置参数2.1.6 生成Engine2.1.7 保存为模型文件2.1.8 释放资源 2.2 运行期2.2.1…

C#--核心

CSharp核心知识点学习 学习内容有: 绪论:面向对象的概念 Lesson1:类和对象 练习: Lesson2:封装--成员变量和访问修饰符 练习: Lesson3:封装--成员方法 Lesson4:封装--构造函数和析构函数 知识点四 垃圾回收…

Web前端-移动web开发——flex布局

移动web开发——flex布局 1.0传统布局和flex布局对比 1.1传统布局 兼容性好布局繁琐局限性,不能再移动端很好的布局 1.2 flex布局 操作方便,布局极其简单,移动端使用比较广泛pc端浏览器支持情况比较差IE11或更低版本不支持flex或仅支持部…

SouthernBiotech抗荧光淬灭封片剂

荧光淬灭又称荧光熄灭或萃灭,是指导致特定物质的荧光强度和寿命减少的所有现象。引起荧光淬灭的物质称为荧光淬灭剂。SouthernBiotech专门开发的Fluoromount-G系列荧光封片剂是以甘油为基础,加入抗荧光淬灭剂,可明显降低荧光淬灭现象&#xf…

使用setdefault撰写文本索引脚本(出自Fluent Python案例)

背景介绍 由于我们主要介绍撰写脚本的方法,所以用一个简单的文本例子进行分析 a[(19,18),(20,53)] Although[(11,1),(16,1),(18,1)] ambiguity[(14,16)] 以上内容可以保存在一个txt文件中,任务是统计文件中每一个词(包括字母,数…

AI编程可视化Java项目拆解第一弹,解析本地Java项目

之前分享过一篇使用 AI 可视化 Java 项目的文章,同步在 AI 破局星球、知乎、掘金等地方都分享了。 原文在这里AI 编程:可视化 Java 项目 有很多人感兴趣,我打算写一个系列文章拆解这个项目,大家多多点赞支持~ 今天分享的是第一…

C语言之从浅入深一步一步全方位理解指针【附笔试题】

文章目录 前言从浅入深理解指针《第一阶段》一、内存和地址1.1 内存1.2 究竟该如何理解编址 二、指针变量和地址2.1 取地址操作符(&) 三、指针变量和解引用操作符(*)3.1 指针变量3.2 如何拆解指针类型3.3 解引用操作符 四、指…