【Elasticsearch入门到落地】6、索引库的操作
接上篇《5、安装IK分词器》
上一篇我们进行了IK分词器的安装与测试,本篇我们来学习ElasticSearch的索引库的操作,学习mapping映射属性以及CRUD操作。
一、前情回顾
我们在前几篇学习了ElasticSearch的基本概念,并动手搭建了ElasticSearch环境,从本篇开始我们就实际来学习ElasticSearch的实操。
我们知道在ElasticSearch中有“索引库”的概念,这个概念就像数据库中的“表”,而索引库中有很多的文档,就类似于数据库中一行一行的数据。那我们应该知道,数据库是先创建表然后再添加数据,那ElasticSearch也是一样,需要现有索引库,然后才能在里面添加文档。所以我们的学习顺序也是先学习索引库的操作,后面再学习文档的操作。
创建一个索引库就像建表一样,你的语句是需要指定一个Schema的,即对字段的一些约束。那么索引库也是要指定相应的mapping映射,这个mapping映射就是对文档的约束。我们来学习一下mapping映射的约束和数据库的约束有什么差别,然后再动手实践索引库的增删改查(即CRUD操作)。
二、mapping映射
1、mapping属性
mapping是对索引库中文档的约束,我们打开ES的官网,可以看到在“mapping参数”一栏,有很多的mapping属性,我们可以根据需要一个个的学习:

地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html
我们这里只讲解比较核心的mapping属性,常见的mapping属性包括:
(1)type:字段数据类型,常见的简单类型有:
●字符串:text(可分词的文本)、keyword(精确值,例如国家、品牌、IP地址)
●数值:long、integer、short、byte、double、float
●布尔:boolean
●日期:date
●对象:object
(2)index:是否创建索引,默认为true
(3)analyzer:使用哪种分词器(与上面的text可分词文本结合)。
(4)properties:该字段的子字段
其他的属性大家可以参考官方文档了解。
三、创建索引库
ES中通过Restful请求操作索引库、文档。请求内容用DSL语句(Domain Specific Language,领域特定语言)来表示。创建索引库和mapping的DSL语法如下:
PUT /索引库名称
{"mappings":{"properties":{"字段名":{"type": "text",'analyzer":"ik_smart"},"字段名2":{"type": "keyword",'index":false},"字段名3":{"properties":{"子字段":{"type": "keyword"}}},// ...略}}
}
下面是一个真实的代码示例:
PUT /heima
{"mappings":{"properties":{"info":{"type": "text","analyzer":"ik_smart"},"email":{"type" :"keyword","index":false},"name":{"properties":{"firstName":{"type":"keyword"}}},// ...略}}
}
上述代码用来定义一个名为heima的索引(Index),并指定了该索引中文档的字段映射(Mappings)。字段映射定义了文档中各个字段的数据类型、索引方式、分词器等属性。下面是对这段DSL的详细解读:
1、创建索引:
PUT /heima:这个命令用于创建一个名为heima的索引。如果索引已经存在,这个命令会尝试更新它的设置和映射(取决于Elasticsearch的版本和配置)。
2、映射定义:
"mappings":{...}:这一部分定义了索引中文档的字段映射。字段映射指定了文档中每个字段的属性。
3、字段属性:
(1)"info":{...}:定义了名为info的字段。
●"type": "text":指定字段类型为text,这意味着该字段的内容会被全文索引,适用于全文搜索。
●"analyzer":"ik_smart":指定使用ik_smart分词器。ik_smart是IK Analyzer插件提供的一种中文分词器,它会对中文文本进行智能分词,适合需要精确匹配的搜索场景。
(2)"email":{...}:定义了名为email的字段。
●"type" :"keyword":指定字段类型为keyword,适用于精确值搜索(如过滤、排序和聚合)。
●"index":"false":设置该字段不被索引。这意味着该字段的内容不会被存储到倒排索引中,因此无法通过该字段进行搜索。这通常用于那些只需要在查询结果中显示,但不需要搜索的字段。
(3)"name":{...}:定义了名为name的复合字段,这里它是一个对象类型。
●"properties":{...}:在对象类型中,通过properties关键字定义对象内部的字段。
●"firstName":{...}:定义了name对象内部的firstName字段。
●"type":"keyword":指定字段类型为keyword,适用于需要精确匹配的搜索场景。
我们打开Kibana图形化界面,打开Dev Tools,来编写一段创建索引库的DSL:

点击右边的执行按钮,就算是创建索引库成功了。
四、索引库的增删改查
1、查看索引库
语法:
GET /索引库名
示例:
GET /heima
2、删除索引库
语法:
DELETE /索引库名
示例:
DELETE /heima
3、修改索引库
索引库和mapping一旦创建无法修改,但是可以添加新的字段,语法如下
PUT /索引库名/_mapping
{"properties":{"新字段名":{"type": "integer"}}
}
示例:
PUT /heima/_mapping
{"properties":{"age":{"type": "integer"}}
}
4、演示
(1)查询heima索引库

这个查询ElasticSearch中heima索引库的结果提供了关于该索引的详细信息,包括别名(aliases)、映射(mappings)、以及设置(settings)。下面是对这些信息的简要解释:
●别名(Aliases):
"aliases" : { }:表示该索引没有定义任何别名。别名可以用于在不改变索引实际名称的情况下,对索引进行引用或操作。
●映射(Mappings):
映射部分定义了索引中文档的字段及其属性。
"email"字段:类型为keyword,且不被索引("index" : false),这意味着不能通过该字段进行搜索,但可以在返回结果中显示。
"info"字段:类型为text,使用ik_smart分词器进行全文索引,适用于全文搜索。
"name"字段:是一个复合字段(对象类型),包含firstName和lastName两个子字段,它们都是keyword类型,适用于精确匹配搜索。
●设置(Settings):
设置部分包含了索引的配置信息。
"number_of_shards" : "1":表示索引被分割成一个分片。分片是Elasticsearch分布式存储和搜索的基本单位。
"number_of_replicas" : "1":表示每个分片有一个副本。副本用于提高数据的可用性和搜索性能。
"routing" : { ... }:路由设置,这里指定了数据分配时的偏好设置("_tier_preference" : "data_content"),这通常与Elasticsearch的数据层(tier)配置相关,用于优化数据存储和访问。
"creation_date" : "1737254104241":索引的创建时间戳。
"uuid" : "9YJoz4P4Tg6K7eQ0fD3MQw":索引的唯一标识符。
"version" : { "created" : "7120199" }:索引创建时的Elasticsearch版本号。
总结来说,这个查询结果提供了heima索引的完整配置信息,包括字段映射、分片数量、副本数量、路由设置、创建时间、唯一标识符和创建时的Elasticsearch版本号。这些信息对于理解索引的结构和行为,以及进行索引管理和优化非常有用。
(2)修改heima索引库
给heima数据库添加age属性:

此时再查看索引库,就可以看到新加的属性:

如果此时我们重复添加age属性(即使把type改为long也不行),就会报错:

索引库是不能修改的。
(3)删除heima索引库
运行删除语法:

运行完毕后,再次查询heima索引库,发现没有了:

删除成功。
至此,关于ElasticSearch的索引库的操作就讲解完毕了。下一篇我们来学习文档的操作。
参考:《黑马Elasticsearch全套教程》
转载请注明出处:https://blog.csdn.net/acmman/article/details/145240260
相关文章:
【Elasticsearch入门到落地】6、索引库的操作
接上篇《5、安装IK分词器》 上一篇我们进行了IK分词器的安装与测试,本篇我们来学习ElasticSearch的索引库的操作,学习mapping映射属性以及CRUD操作。 一、前情回顾 我们在前几篇学习了ElasticSearch的基本概念,并动手搭建了ElasticSearch环…...
Java TCP可靠传输(1)
TCP 可靠传输 一. 确认应答 由发送方填充,再由接收方在序号的基础上1,填充到确认序号中,来表示已经接收到前面发送的,表明下一个从哪个位置发送。 二. 超时重传 数据在网络上传输时会经过很多网络设备,如果其中一个…...
ipad和macbook同步zotero文献附件失败的解决办法
背景:我所有的文献及其附件pdf都是在台式机(windows系统),想要把这些文献同步到云上,然后再从云上同步到平板和其他笔记本电脑比如macbook。文献同步虽已成功,但文献附件都无法打开。 平板报错如下…...
linux-ubuntu学习笔记碎记
~指/home/user_name这个目录 查看软件安装目录:whereis vim 查看当前路径:pwd 终端中键入ctrls会挂起终端,即终端不响应键鼠;ctrlq可以恢复。 和虚拟机开启共享文件夹互传文件 点击桌面,按ctrlaltt,开…...
RV1126+FFMPEG推流项目(11)编码音视频数据 + FFMPEG时间戳处理
本节介绍本章节主要讲解的是push_server_thread线程的具体处理流程, push_server_thread这个线程的主要功能是通过时间戳比较,来处理音频、视频的数据并最终推流到SRT、RTMP、UDP、RTSP服务器 push_server_thread:流程如下 上图,…...
人工智能的出现,给生命科学领域的研究带来全新的视角|行业前沿·25-01-22
小罗碎碎念 今天和大家分享一份白皮书,系统总结并陈述人工智能在生命科学领域的应用。 人工智能在生命科学领域的应用,具体包括——单细胞转录组、疾病诊疗、医疗文本处理、RNA结构预测等多个方面,通过这份报告,我们可以详细了解相…...
python注释格式总结
三个双引号的用于文件,类,函数注释。 没有统一的规定,以下是比较清晰的写法。 文件注释(文件顶部):文件用途空行作者信息(每行一个键:值) 类注释(类名下行)…...
Django实现数据库的表间三种关系
Django实现数据库的表间三种关系 1. 一对多(One-to-Many)关系示例:关系说明:查询示例: 2. 一对一(One-to-One)关系示例:关系说明:查询示例: 3. 多对多&#x…...
C++蓝桥真题讲解
本篇文章和大家一起来试试一些简单的蓝桥真题 注意:本篇文章将全程使用devc和蓝桥官网,如果有小伙伴找不到devc安装包的可以本篇文章中下载。 赛前必知点 1.正式比赛时,先从蓝桥官网下载题目文档,然后用devc进行编译,…...
【21】Word:德国旅游业务❗
目录 题目 NO1.2.3 NO4 NO5.6 NO7 NO8.9.10.11 题目 NO1.2.3 F12:另存为布局→页面设置→页边距:上下左右选中“德国主要城市”→开始→字体对话框→字体/字号→文本效果:段落对话框→对齐方式/字符间距/段落间距 NO4 布局→表对话框…...
如何分辨ddos攻击和cc攻击?
DDoS(分布式拒绝服务)攻击和 CC(Challenge Collapsar)攻击都属于网络攻击手段,主要通过消耗目标服务器资源使其无法正常提供服务,但它们在攻击原理、攻击特征等方面存在区别: 攻击原理 DDoS 攻…...
enum EPOLL_EVENTS详解
enum EPOLL_EVENTS 是 Linux 中 epoll 机制的核心定义之一,它定义了 epoll 支持的所有事件类型。每个事件类型对应一个唯一的位掩码(bitmask),通过按位或(|)可以组合多个事件类型,通过按位与&am…...
阿里前端开发规范
文章目录 1. 为什么前端写代码要规范?一、代码规范的必要性二、 规范带来的好处 2. 资源一、推荐 1. 为什么前端写代码要规范? 一、代码规范的必要性 可维护性 统一的代码风格便于理解和修改减少代码维护成本降低项目交接难度 团队协作 提高团队开发效…...
从函数式编程到响应式编程:现代开发中的范式转变
引言 随着软件开发领域的不断进化,编程范式也在经历着一场又一场的变革。从面向过程到面向对象,再到近年来流行的函数式编程和响应式编程,开发者正逐步适应不同的编程思想来解决现代软件开发中的复杂问题。本文将带你了解函数式编程和响应式编…...
Django学习笔记(启动项目)-03
Django学习笔记(启动项目)-03 1、在urls文件中配置一个路由url 2、在views文件中创建视图函数 3、启动项目测试结果 # 输入项目启动命令 python manage.py runserver4、创建HTML模版和静态文件 1、在templates文件夹中创建一个html 2、创建url路由与视图函数 3、测试效果 4、…...
量变引起质变
量变引起质变,这个是最本质的规律,重复进行一件事情,这件事情就会越来越完善,越来越完美,哪怕是菜鸟,重复多了就是大佬。 我从说话结结巴巴,到说话流畅,只是用了15天直播写代码&…...
NewStar CTF week1 web wp
谢谢皮蛋 做这题之前需要先去学习一些数据库的知识 1 order by 2 1可以理解为输入的id,是一个占位符,按第二列排序用来测试列数,如果没有两列则会报错-1 union select 1,2 -1同样是占位符,union的作用是将注入语句合并到原始语句…...
李沐vscode配置+github管理+FFmpeg视频搬运+百度API添加翻译字幕
终端输入nvidia-smi查看cuda版本 我的是12.5,在网上没有找到12.5的torch,就安装12.1的。torch,torchvision,torchaudio版本以及python版本要对应 参考:https://blog.csdn.net/FengHanI/article/details/135116114 创…...
深度学习中Batch Normalization(BN)原理、作用浅析
最近做剪枝学习,其中一种是基于BN层的γ作为缩放因子进行剪枝的,那么我想搞懂BN的工作原理更好的理解网络、剪枝等,所以有了该文。 首先先说BN的作用在详细拆解,理解。以知乎一条高赞评论说明BN层到底在干什么。 Batch Norm 为什…...
C语言常用字符串处理函数
头文件:#include <string.h> strlen size_t strlen( char *str ); 功能:函数返回一个整数值,表示给定字符串的长度(不包括结束符\0) strcat char *strcat( char *str1, const char *str2 ); 功能&a…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
