【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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android系统开发(十五):从 60Hz 到 120Hz,多刷新率进化简史

引言 欢迎来到“帧率探索实验室”!今天,我们要聊聊 Android 11 中对多种刷新率设备的支持。你可能会问:“这和我写代码有什么关系?”别急,高刷新率不仅仅让屏幕更顺滑,还会直接影响用户体验。想象一下&…

Java Web开发高级——性能优化与高可用性设计

在现代Web开发中,性能优化和高可用性设计是保障用户体验和业务连续性的重要环节。本文围绕以下三个方面展开:Web应用性能瓶颈分析与优化、数据库连接池与缓存优化、高可用架构设计与负载均衡。通过结合最新技术方案,帮助开发者在实际场景中构…

【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键

文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识&#xff1…

论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24

论文地址:https://arxiv.org/abs/2403.01744 bib引用: misc{zhang2024notellmretrievablelargelanguage,title{NoteLLM: A Retrievable Large Language Model for Note Recommendation}, author{Chao Zhang and Shiwei Wu and Haoxin Zhang and Tong Xu…

Windows 上安装 MongoDB 的 zip 包

博主介绍: 大家好,我是想成为Super的Yuperman,互联网宇宙厂经验,17年医疗健康行业的码拉松奔跑者,曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 近期专注: RPA应用研究,主流厂商产…

《Vue3 九》动画

Vue 提供了一些内置组件和对应的 API 来完成动画&#xff0c;利用它们可以方便地实现动画效果。 <transition> 内置组件&#xff1a; Vue 提供了 <transition> 内置组件&#xff0c;可以给任意元素或组件添加进入/离开时的动画效果。在条件渲染、动态组件、改变 …

C语言进阶习题【1】指针和数组(4)——二维指针

4. 二维指针练习&#xff08;sizeof&#xff09; 二维数组名和&二维数组名 二维数组名&#xff0c;指的是第一行的地址&#xff0c;1会跳过第一行 &二维数组名&#xff0c;指的是整个数组地址 1会跳过整个数组 4.1代码验证 #include<stdio.h> #include<strin…

2024年最新ComfyUI汉化及manager插件安装详解!

前言 在ComfyUI文生图详解中&#xff0c;学习过如果想要安装相应的模型&#xff0c;需要到模型资源网站&#xff08;抱抱脸、C站、魔塔、哩布等&#xff09;下载想要的模型&#xff0c;手动安装到ComfyUI安装目录下对应的目录中。 为了简化这个流程&#xff0c;我们需要安装Co…

Mysql常见问题处理集锦

Mysql常见问题处理集锦 root用户密码忘记&#xff0c;重置的操作(windows上的操作)MySQL报错&#xff1a;ERROR 1118 (42000): Row size too large. 或者 Row size too large (&#xff1e; 8126).场景&#xff1a;报错原因解决办法 详解行大小限制示例&#xff1a;内容来源于网…

【神经网络基础】

目录 一、神经网络的构成 1.1什么是神经网络&#xff1f; 1.2 激活函数 1.2.1 Sigmoid 1.2.2 Tanh 1.2.3 ReLU 1.2.4 softmax 1.2.5 其他激活函数 1.2.6 选择激活函数 1.3 参数初始化 1.4 模型构建 二、损失函数 2.1 分类问题 2.1.1多分类&#xff08;多分类交叉…

vulnhub靶场【Mr-robot靶机】,分析数据包,根据回显不同进行爆破

前言 靶机&#xff1a;lampiao&#xff0c;IP地址为192.168.10.12 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用虚拟机&#xff0c;网卡为桥接模式 该靶机目前只剩下一个了&#xff0c;之前记得是有两台构成系列的。 文章中涉及的靶机&#xff0c;来源于v…

上一次和英特尔的接触...

大家好啊&#xff0c;我是董董灿。 最近很多人在转发英特尔将被收购的消息&#xff08;真假不知&#xff09;。 被收购对英特尔而言&#xff0c;很悲情。 作为早期通用计算领域的老大哥&#xff0c;在 AI 时代&#xff0c;英特尔意外的被 AI 计算&#xff08;英伟达&#xf…

【网络 MAC 学习专栏 -- 如何理解 PHY 的 Link Up】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewClause 22/Clause 45Clause 22Clause 45 PHY Link 状态的软件实现 转自&#xff1a; 开心果 Need Car 2022年10月20日 09:50 上海 Overview PHY…

Android设备:Linux远程lldb调试

更多内容&#xff1a;XiaoJ的知识星球 目录 一、环境准备1.1 安装llvm/NDK1.2 开启lldb-server服务1.3 lldb连接lldb-server 二、使用lldb调试Android native源码2.1 运行调试2.2 .lldbinit文件 下面介绍Android设备&#xff08;Android手机为例&#xff09;&#xff0c;在Linu…

力扣动态规划-2【算法学习day.96】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…

电商项目高级篇08-springCache

电商项目高级篇08-springCache 1、整合springCache2、Cacheable细节设置 1、整合springCache 1、引入依赖 <!--引入springCache--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifa…

模块化架构与微服务架构,哪种更适合桌面软件开发?

前言 在现代软件开发中&#xff0c;架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景&#xff0c;尤其在C#桌面软件开发领域&#xff0c;模块化架构往往更加具有实践性。本文将对这两种架构进行对比&#xff0…

grafana + Prometheus + node_exporter搭建监控大屏

本文介绍生产系统监控大屏的搭建&#xff0c;比较实用也是实际应用比较多的方式&#xff0c;希望能够帮助大家对监控系统有一定的认识。 0、规划 grafana主要是展示和报警&#xff0c;Prometheus用于保存监控数据&#xff0c;node_exporter用于实时采集各个应用服务器的事实状…

诗意与技术交织的奇妙世界

诗意与技术交织的奇妙世界 在CSDN的浩瀚星空中&#xff0c;有这样一座独特的岛屿&#xff0c;它属于酒城译痴无心剑。这是一个充满诗意与智慧的世界&#xff0c;是无心剑用文字精心构筑的精神家园。 无心剑是酒城泸州人&#xff0c;毕业于南京大学&#xff0c;基础数学专业&am…

Conv2d中groups=2时手动计算及pytorch源码验证

文章目录 1. excel 原理计算2. pytorch 源码 1. excel 原理计算 2. pytorch 源码 import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_printoptions(precision3, sci_modeFalse)if __name__ "__main__":run_code 0batch_size 2in_cha…