【Elasticsearch入门到落地】6、索引库的操作

ops/2025/1/24 3:30:04/

接上篇《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


http://www.ppmy.cn/ops/152641.html

相关文章

字玩FontPlayer开发笔记12 Vue3撤销重做功能

字玩FontPlayer开发笔记12 Vue3撤销重做功能 字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3 ElementUI开发,源代码:github | gitee 笔记 撤销重做功能是设计工具必不可少的模块,以前尝试使用成熟的库实现撤销重做功能…

探索前端开发中的 Web Vitals —— 提升用户体验的关键技术

随着用户对网站性能的要求越来越高,前端开发不仅需要关注功能实现,还需要关注页面加载速度、交互响应速度以及视觉稳定性等因素。Google 在 2020 年推出了 Web Vitals(网页核心指标),这套指标为前端开发者提供了一种衡…

数据结构(精讲)----应用篇

注意:作者会出两个版本的数据结构的介绍;第一个版本介绍的数据结构会偏向理论性,第二个版本,也就是从这篇文章开始,这个版本会偏向应用性;会带领大家了解数据结构,以及为什么学习数据结构&#…

Windows截获系统鼠标消息转发到指定窗口

注册输入设备,截获系统底层的设备消息 先看关键代码: RAWINPUTDEVICE rids[1]; rids[0].usUsagePage HID_USAGE_PAGE_GENERIC; //0x01 rids[0].usUsage HID_USAGE_GENERIC_MOUSE; //0x02 rids[0].dwFlags RIDEV_INPUTSINK; //0x00000100 rids[0].hwn…

图论DFS:黑红树

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法&#xf…

【Unity】ScrollViewContent适配问题(Contentsizefilter不刷新、ContentSizeFilter失效问题)

最近做了一个项目,菜单栏读取数据后自动生成,结果用到了双重布局 父物体 尝试了很多方式,也看过很多大佬的文章,后来自己琢磨了一下,当子物体组件自动生成之后,使用以下以下代码效果会好一些: …

IP地址、子网掩码(NETMASK)和网关(Gateway)

IP: 192.168.123.1NETMASK: 255.255.255.0Gateway: 192.168.123.254 IP地址、子网掩码(NETMASK)和网关(Gateway)是计算机网络中用于定位和通信的关键元素。针对给出的IP地址192.168.123.1、子网掩码255.255.255.0和网关192.168.12…

【深度学习】利用Java DL4J 训练金融投资组合模型

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…