当前位置: 首页 > news >正文

【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。文献同步虽已成功,但文献附件都无法打开。 平板报错如下&#xf…...

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注释格式总结

三个双引号的用于文件,类,函数注释。 没有统一的规定,以下是比较清晰的写法。 文件注释(文件顶部):文件用途空行作者信息(每行一个键:值) 类注释(类名下行&#xff09…...

Django实现数据库的表间三种关系

Django实现数据库的表间三种关系 1. 一对多(One-to-Many)关系示例:关系说明:查询示例: 2. 一对一(One-to-One)关系示例:关系说明:查询示例: 3. 多对多&#x…...

C++蓝桥真题讲解

本篇文章和大家一起来试试一些简单的蓝桥真题 注意:本篇文章将全程使用devc和蓝桥官网,如果有小伙伴找不到devc安装包的可以本篇文章中下载。 赛前必知点 1.正式比赛时,先从蓝桥官网下载题目文档,然后用devc进行编译&#xff0c…...

【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语言常用字符串处理函数

头文件&#xff1a;#include <string.h> strlen size_t strlen( char *str ); 功能&#xff1a;函数返回一个整数值&#xff0c;表示给定字符串的长度&#xff08;不包括结束符\0&#xff09; strcat char *strcat( char *str1, const char *str2 )&#xff1b; 功能&a…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...