【ElasticSearch系列-02】ElasticSearch的概念和基本操作

ElasticSearch系列整体栏目


内容链接地址
【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827
【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631

深入理解ElasticSearch概念和基本操作

    • 1,ES的基本概念
    • 2,ES的基本操作
      • 2.1,索引的创建和删除
      • 2.2,文档的增删改查
    • 3,mapping
      • 3.1,静态映射和动态映射
      • 3.2,reindex重建索引
      • 3.3,常用mapping参数设置

1,ES的基本概念

在上一篇中,讲解了ElasticSearch的搭建以及Kibana的搭建,接下来就可以去了解其内部原理了,从es的官网上可以看到,ElasticSearch主要的一些应用,如做系统日志,大数据分析,搜索引擎,性能监控等等

在这里插入图片描述

ElasticSearch同时也支持RestFulf风格,这样就可以通过HTTP来操作ES中的数据,可以达到实时搜索,稳定,可靠等强大性能,同时也支持多种客户端语言,其生态圈也相当友好,版本还在一直迭代更新。

在关系型数据库中,如mysql,内部有库、表、行列等,在ElasticSearch中,也存在着和其一样概念的类型数据,如下图,Index对应的就是数据库,Type类型对应的就是表,Document文档对应的就是行,Field字段对应的就是列。在7.0开始后,一个索引库中只能存在一种类型。

在这里插入图片描述

2,ES的基本操作

2.1,索引的创建和删除

索引的创建方式如下,需要注意的是,索引的名称必须全部小写,否则会报错

PUT /zhs_db

接下来查看索引的信息,直接通过GET命令即可

GET /zhs_db

在使用GET命令后,在控制台会出现以下数据,一些别名,创建时间,索引的分片数,副本数据等

{"zhs_db" : {"aliases" : { },"mappings" : { },							//映射关系,每个字段的数据和类型"settings" : {"index" : {"creation_date" : "1695018423771",		//创建索引的时间"number_of_shards" : "1",				//分片数"number_of_replicas" : "1",				//副本数"uuid" : "eHD7DY1eR7Ki4zm1QKXzrg",		//uuid"version" : {							//版本号"created" : "7070099"},"provided_name" : "es_db"}}}
}

删除索引库的方式如下,可以直接通过DELETE的方式直接删除

DELETE /zhs_db

2.2,文档的增删改查

在ES中,文档就是相当于mysql表中的一条数据,只不过ES是通过序列化后的JSON的方式保存,JSON数据中支持层层嵌套,接下来举一个例子来说明文档的含义

首先创建一个索引库,并设置分词器为IK分词器,粒度设置为细粒度。

PUT /zhs_db
{"settings" : {"index" : {"analysis.analyzer.default.type": "ik_max_word"}}
}

由于本人使用的是7.7.0的版本,因此type类型可以不需处理。随后往文档中插入几条数据,其数据如下

PUT /zhs_db/_doc/1
{
"name": "zhenghuisheng",
"sex": 1,
"age": 18,
"dept": "团长",
"remark": "tz"
}PUT /zhs_db/_doc/2
{
"name": "xiaozheng",
"sex": 1,
"age": 19,
"dept": "连长",
"remark": "lz"
}PUT /zhs_db/_doc/3
{
"name": "郑跟班",
"sex": 0,
"age": 20,
"dept": "班长",
"remark": "bz"
}

添加文档除了使用这个PUT请求之外,还可以使用POST请求。PUT请求需要手动的指定一个id才能操作,而POST请求如果在没指定id的情况下,ES内部会自动的生成一个id,如果指定了,就用指定的id。如下图,ES内部自动的生成了一个id

在这里插入图片描述

并且无论是PUT请求还是POST请求,在重复进行数据的插入时,会出现数据覆盖的情况,类似于先删除后覆盖。

也存在直接创建完,不需要进行更新和删除操作的,就是需要用到create的语法,如果已经存在这个id对应的文档,那么就会直接抛异常

PUT /zhs_db/_created/1

在通过id获取某条文档数据的时候比较简单,只需要索引库 + _doc + 文档对应的id即可

GET /zhs_db/_doc/1  

在获取这个zhs_db索引库的时候,其结果如下。每个字段中可以包含数值、字符串、布尔类型、日期、二进制等

在这里插入图片描述

在重复执行查询文档数据时,该条文档的version版本号和seq序列号会跟着改变,并且result的 状态会从创建的 created 状态变成 updated 状态。

"_version" : 23, 	//	版本号
"_seq_no" : 22,		//	序列号

或者直接通过 _search 的方式将数据查出,这里面也可以写一些SDL语法进行匹配模式

GET /zhs_db/_search

更新可以直接使用POST的方式进行更新操作,只需要通过 _update 就可以实现更新操作。

POST /zhs_db/_update/1

也可以只更新某个文档中的部分数据,如只更新文档中的某一个字段

POST /zhs_db/_update/1
{"name":"王五"
}

除了这两种方式是属于更新操作之外,上面的重复插入操作也会有更新的效果,如修改序列号等等。

通过id删除文档也比较简单,只需要通过DELETE关键字即可

DELETE /zhs_db/_doc/2

在7.x版本之前,为了保证多线程场景下的线程安全,采用通过version版本号来实现乐观锁,但是在7.x开始,是通过**_seq_no** 和 _primary_term 字段来保证乐观锁的

POST /zhs_db/_update/3?if_seq_no=21&if_primary_term=6
{"name": "赵六"
}

3,mapping

3.1,静态映射和动态映射

动态映射指的是Es在插入数据时,不需要手动的指定插入字段的数据类型,es内部会自动的根据对应的数据类型转成相应的数据类型,内部有自动识别机制

PUT /zhs_db/_doc/1
{"age":10,"name":"zhenghuisheng"
}
GET /zhs_db

其结果如下,可以看到在mapping中的属性age和name给了对应的属性。text类型则表示是可以全文检索的数据类型

在这里插入图片描述

静态映射指的是在创建索引时,同时将文档中字段的数据类型也设置好

DELETE /zhs_db
PUT /zhs_db
{"mappings": {"properties": {"age": {"type": "long"},"name": {"type": "text","analyzer": "ik_smart"}}}
}

在es的动态映射中,其对应的数据类型如下,有这些对应的字符串类型,布尔类型,浮点型,整型,对象,数组等img

在mapping建立好之后,可能会遇到新增或者删除字段的情况,因此可以直接通过这个dynamic这个属性控制

  • 当该属性为true时,一旦有新的文档写入,mapping也会自动更新
  • 当该属性为false时,mapping不会被更新,新增的字段内容无法被索引查询
  • 当该属性为strict时,文档直接写入失败,并且同时抛出异常
PUT /zhs_db/_mapping
{"dynamic":true
}

3.2,reindex重建索引

如果是索引的文档中已经有了数据,那么就不支持修改操作,只能重新的建立索引,然后将原索引的数据迁移到新的索引中。那么就需要通过这个 _reindex 这个命令,source设置为需要修改的索引,dest设置为新建的索引

POST _reindex
{"source": {		//原索引"index": "zhs_db"	},"dest": {"index": "zhs_db2"}
}

并且为了解决接口调用的问题,因为此时索引已经从zhs_db变成了zhs_db2,所以可以通过修改别名的方式,减少上层代码的变动,需要先将原索引删除,随后将新索引的别名设置成原索引的名称

DELETE /zhs_db	
PUT /zhs_db2/_alias/zhs_db

在查这个新的索引 zhs_db2 时,只需要查询原来的 zhs_db,就能将原数据全部查询出

GET /zhs_db

3.3,常用mapping参数设置

如果不想被索引,可以直接在对应的字段加上index这个属性,并且设置value为false

{"mappings" : {"properties" : {"name":{"type": "text","index": false}}}
}

如果需要在有索引的字段中将为null的值查询出,那么可以设置一个 null_value的属性,并将值设置成null

{"mappings" : {"properties" : {"name":{"type": "text","null_value": "NULL"}}}
}

如果是需要字段合并的场景,如省市区等的合并等,那就需要借助于这个 copy_to 这个属性,可以将这个值全部添加到这个full_address这个属性中,后续可以直接通过查询这个 full_address 这个属性将需要匹配的值查询出

{"mappings" : {"properties" : {"province" : {"type" : "keyword","copy_to": "full_address"},"city" : {"type" : "text","copy_to": "full_address"}}}
}

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

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

相关文章

【Scheme】Scheme 编程学习 (七) —— Macros 宏

【Scheme】Scheme 编程学习 (七) —— Macros 宏 文章目录 I - 问题 (The problem)II - 隐藏复杂度 (Hiding complexity)III - 初次尝试 (First attempt)IV - 解决方案 (A solution)V - 其他的实现方式 (How else could we do this?)5.1 - 宏 (Macros)5.2 - 引用 (…

一百九十八、Java——IDEA项目中有参构造、无参构造等快捷键(持续梳理中)

一、目的 由于IDEA项目中有很多快捷键,可以很好的提高开发效率,因此整理一下 二、快捷键 (一)快捷键生成public static void main(String[] args) {} 快捷键:psvm (二)快捷键在test中创建cn…

postgresql|数据库|SQL语句冲突的解决

前言: postgresql数据库是比较复杂的一个关系型数据库,而有些时候,即使是简单的插入更新操作也是有很多复杂的机制。 那么,什么是冲突?什么时候会遇到冲突(也就是冲突的常见场景)?…

基于YOLOv8模型暗夜下人脸目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型暗夜下人脸目标检测系统可用于日常生活中检测与定位黑夜下人脸目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法…

搜索与图论:Prim

Prim算法求最小生成树: 每次将离连通部分的最近的点和点对应的边加入的连通部分&#xff0c;连通部分逐渐扩大&#xff0c;最后将整个图连通起来&#xff0c;并且边长之和最小。 #include <iostream> #include <cstring> #include <algorithm> using names…

一种支持热插拔的服务端插件设计思路

定位 服务端插件是一个逻辑扩展平台,提供了一个快速托管逻辑的能力。 核心特点 高性能:相对于RPC调用,没有网络的损耗,性能足够强劲。 高可靠:基于线程隔离,保证互不影响,插件的资源占用或崩溃等问题不直接影响业务。 部署快:不需要发布审核流程, 插件本身逻辑简短,…

【Overload游戏引擎细节分析】PBR材质Shader---完结篇

PBR基于物理的渲染可以实现更加真实的效果&#xff0c;其Shader值得分析一下。但PBR需要较多的基础知识&#xff0c;不适合不会OpenGL的朋友。 一、PBR理论 PBR指基于物理的渲染&#xff0c;其理论较多&#xff0c;需要的基础知识也较多&#xff0c;我在这就不再写一遍了&…

JVM虚拟机:如何调整堆空间的大小?

对内存的调优 如上所示,从物理角度来说呢,堆内存就是蓝色的区域,从逻辑角度来说,堆内存包含这个红色的部分,调优肯定是条物理的大小了,我们先来看一下物理内存的大小是多少? 如上所示,我们通过maxMemory获取到java虚拟机试图使用的最大内存量,默认为物理内存的1/4,比我…

SEO优化应该注意哪些细节?

SEO优化是一项细致的工作&#xff0c;需要关注细节&#xff0c;因为在很多情况下&#xff0c;被忽略的细节决定了优化的成败。俗话说&#xff1a;细节决定成败。 以下是我知道的一些小细节&#xff0c;希望能对一些新站长有所帮助。 1.内容非常重要。尝试使用原始或伪原始。原件…

where怎么等于多个值,sql where多个值

在SQL中&#xff0c;可以使用IN和OR操作符来匹配多个值&#xff0c;以在WHERE语句中执行过滤。以下是一些示例&#xff1a; 使用IN操作符匹配多个值 可以使用IN操作符来匹配多个可能的值&#xff0c;如下所示&#xff1a; SELECT * FROM 表名 WHERE 字段名 IN (值1, 值2, 值3…

Linux期末复习——多线程编程

线程概述 线程基本编程 函数说明 pthread_create(): 创建线程&#xff0c;成功返回0pthread_exit(): 主动退出线程&#xff0c;成功返回0pthread_join(): 挂起线程等待结束&#xff0c;成功返回0pthread_cancel在别的线程中终止另一个线程的执行&#xff0c;成功返回0 示例…

初识CSS层叠样式表

文章目录 CSS介绍CSS层叠样式表1.CSS组成2.CSS语法结构3.注释语法4.引入CSS的多种方式 CSS选择器1.CSS基础选择器2.CSS组成选择器3.分组与嵌套4.CSS属性选择器5.CSS伪类选择器6.CSS伪元素选择器 选择器优先级CSS继承选择器的优先级 CSS样式调节字体样式文本颜色文本属性 边框di…

在 Visual Studio 中远程调试 C++ 项目

目录 一、说明二、下载远程工具1. 官网下载2. 自己电脑上拷贝 三、 运行远程工具四、本机Visual Studio配置五、自动部署 一、说明 参考官方文档&#xff1a;https://learn.microsoft.com/zh-cn/visualstudio/debugger/remote-debugging-cpp?viewvs-2022 二、下载远程工具 …

数据库深入浅出,数据库介绍,SQL介绍,DDL、DML、DQL、TCL介绍

一、基础知识&#xff1a; 1.数据库基础知识 数据(Data)&#xff1a;文本信息(字母、数字、符号等)、音频、视频、图片等&#xff1b; 数据库(DataBase)&#xff1a;存储数据的仓库&#xff0c;本质文件&#xff0c;以文件的形式将数据保存到电脑磁盘中 数据库管理系统(DBMS)&…

clickhouse插入代替更新

1.使用ReplacingMergeTree引擎 CREATE TABLE xxx ( \ id_card String,\ session_id String,\ timestamp DateTime(Asia/Shanghai),\ realname String,\ phone_num String,\ email String ) \ ENGINE ReplacingMergeTree() \ PARTITION BY toY…

【小工具】WebClient远程调用,返回值将Long类型转换为String,自定义注解

文章目录 1. 使用WebClient使用远程调用2. 返回值将Long类型转换为String3. 自定义注解 1. 使用WebClient使用远程调用 <!-- SpringBoot webflux --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

腾讯云轻量应用服务器的“镜像”操作系统选择方法

腾讯云轻量应用服务器镜像怎么选择&#xff1f;如果是用来搭建网站可以选择宝塔Linux面板腾讯云专享版&#xff0c;镜像系统根据实际使用来选择&#xff0c;腾讯云百科txybk.com来详细说下腾讯云轻量应用服务器镜像的选择方法&#xff1a; 腾讯云轻量应用服务器镜像选择 轻量…

BI零售数据分析,告别拖延症,及时掌握一线信息

在日常的零售数据分析中&#xff0c;经常会因为数据量太大&#xff0c;分析指标太多且计算组合多变而导致数据分析报表难产&#xff0c;零售运营决策被迫拖延症。随着BI数据可视化分析技术的发展&#xff0c;智能化、可视化、自助分析的BI数据分析逐渐成熟&#xff0c;形成一套…

嵌入式软件工程师面试题——2025校招社招通用(六)

说明&#xff1a; 面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但在这里博主希望每一个题目&#xff0c;大家都要…

2、NLP文本预处理技术:词干提取和词形还原

一、说明 在上一篇文章中&#xff0c;我们解释了文本预处理的重要性&#xff0c;并解释了一些文本预处理技术。在本文中&#xff0c;我们将介绍词干提取和词形还原主题。 词干提取和词形还原是两种文本预处理技术&#xff0c;用于将单词还原为其基本形式或词根形式。这些技术的…