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

news2024/11/16 21:32:59

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.coloradmin.cn/o/1150969.html

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

相关文章

建筑模板-优质建筑模板厂家推荐

随着建筑行业的不断发展,优质的建筑模板成为了保障工程施工质量的重要一环。在众多建筑模板厂家中,广西贵港市能强优品木业凭借其优质的产品和良好的口碑赢得了业界的认可与信赖。 广西贵港市能强优品木业是一家专注于建筑模板生产的企业,公司…

#stm32整理(二)关于MDK的编译过程及文件类型全解

参考野火开发指南如有侵权即刻删除,只是为了学习交流使用 1、编译 1、编译过程简介 (1)编译,MDK 软件使用的编译器是 armcc 和 armasm,它们根据每个 c/c 和汇编源文件编译 成对应的以“.o”为后缀名的对象文件 (Object Code&…

设计模式—创建型模式之工厂模式

设计模式—创建型模式之工厂模式 工厂模式(Factory Pattern)提供了一种创建对象的最佳方式。我们不必关心对象的创建细节,只需要根据不同情况获取不同产品即可。 简单工厂模式 比如我们有造车的工厂,来生产车,我们先…

b站so层sign算法

前言 大家好呀,欢迎来到我的博客!!! 本期我将带来b站so层sign算法实现 设备: pixel4 android10 下载地址: aHR0cHM6Ly93d3cud2FuZG91amlhLmNvbS9hcHBzLzI4MTI5MS9oaXN0b3J5X3Y2MTgwNTAw 版本: 6.18.0 工具: charles(抓包) socksdroid(流量转发) jadx(反编译dex) ida(反编…

中微CMS8S3680/69xx系列单片机

最近在使用中微CMS8S3680/69xx系列8位单片机来进行电源控制软件开发。 总体觉得这款单片机简单易用,特别是它的数字功能可以映射到任意脚,甚至包括程序的烧录脚,对于PCB布局特别灵活。另外它的存储器资源也是很丰富的,16K字节ROM…

实战 | SQL注入

一、资产搜集 我们都知道sql注入的传参有些是明文的,有些是经过编码或者加密的,所以我们搜索的时候不要仅限于inurl:.php?id1,可以额外的尝试搜搜1的base64编码值MQ,即可以搜索inurl:.php?idMQ,或者搜索1的md5加密值…

C代码的单元测试

C代码中集成gtest单元测试_gtest测试c语言_山河故人~的博客-CSDN博客 Linux安装gtest_gtest安装_山河故人~的博客-CSDN博客 一:安装gtest: 1. 安装gtest 采用源码安装的方式,需确保cmake已经安装。 git clone https://github.com/google/googletest …

网络安全(黑客)—小白自学路线

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟…

商业模式画布的9大模块全解读,产品经理不可不知!

“商场如战场”,在当今瞬息万变的商业环境中,创造出独特且创新的商业模式是每个企业家、策略家和决策者的首要任务。为了在激烈的市场竞争中取得优势,我们需要一个强大且直观的工具来帮助我们规划和塑造公司的商业模式,这个经常被…

从零开始实现神经网络(一)_NN神经网络

参考文章:神经网络介绍 一、神经元 这一神经网络的基本单元,神经元接受输入,对它们进行一些数学运算,并产生一个输出。 这里有三步。 首先,将每个输入(X1)乘以一个权重: 接下来&…

如何备份和恢复微信聊天记录?微信聊天记录1分钟轻松备份和恢复。

微信是一个非常流行的应用程序,不仅在中国,而且在全世界。这个应用程序允许来自其他国家的用户与他们的中国朋友进行群聊、语音消息、视频通话、发送贴纸或 GIF 以及照片。它可以为学生和商人/女性发送重要文件,以及位置共享以防游客在访问中…

内网穿透实现在外远程访问NAS威联通(QNAP)

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 前言 购入威联通NAS后,很多用户对于如何在外在公网环境下的远程访问威联通NAS…

系列四十、请谈一下Spring中事务的传播行为

一、概述 事务的传播行为指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。事务的传播行为至少发生在两个事务方法的嵌套调用中才会出现。 二、传播行为分类

专门解决数学问题的大模型

01 项目介绍 LLEMMA:一个专门解决数学问题的开源大语言模型,能力超过所有已知的开源模型 LLEMMA由多个大学和Eleuther AI公司共同研发,模型能够理解和生成数学表达式、解决数学问题,并与其他计算工具(如Python解释器…

Jenkins Gerrit Trigger插件配置

安装Jenkins 以Jenkins 2.361.1版本为例 docker pull jenkins/jenkins:2.361.1运行容器,将主机的8080端口映射到容器的8080端口,同时将主机的50000端口映射到容器的50000端口(用于构建代理) docker run -d -p 8080:8080 -p 500…

操作系统(Linux)外壳程序shell 、用户、权限

文章目录 操作系统和shell外壳Linux用户普通用户的创建和删除用户的切换 Linux 权限Linux 权限分类文件访问权限修改文件的权限权限掩码粘滞位 大家好,我是纪宁。 这篇文章将介绍 Linux的shell外壳程序,Linux用户切换机Linux权限的内容。 操作系统和shel…

基于SpringBoot的养老院信息管理系统

基于SpringBoot的养老院信息管理系统,java项目,springboot项目,idea都能打开运行。 推荐环境配置:idea jdk1.8 maven mysql5.5/mysql5.7 主要技术: SpringBoot,MySql,ajax,MyBatis 本系统的主要…

Vue 路由指南:畅游单页应用的地图(Vue Router 和 <router-view>)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

STM32F407的系统定时器

文章目录 系统定时器SysTick滴答定时器寄存器STK_CTRL 控制寄存器STK_LOAD 重载寄存器STK_VAL 当前值寄存器STK_CALRB 校准值寄存器 初始化 Systick 定时器SysTick_InitSysTick_CLKSourceConfig delay_us寄存器delay_us库函数delay_xms短时delay_ms长时SysTick_Config 系统定时…