SpringCloud 微服务全栈体系(十三)

第十一章 分布式搜索引擎 elasticsearch

二、索引库操作

  • 索引库就类似数据库表,mapping 映射就类似表的结构。

  • 我们要向 es 中存储数据,必须先创建“库”和“表”。

1. mapping 映射属性

  • mapping 是对索引库中文档的约束,常见的 mapping 属性包括:

    • type:字段数据类型,常见的简单类型有:
      • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip 地址)
      • 数值:long、integer、short、byte、double、float
      • 布尔:boolean
      • 日期:date
      • 对象:object
    • index:是否创建索引,默认为 true
    • analyzer:使用哪种分词器
    • properties:该字段的子字段
  • 例如下面的 json 文档:

{
    "age": 21,
    "weight": 52.1,
    "isMarried": false,
    "info": "小帽课堂学习Java",
    "email": "alex@gmail.com",
    "score": [99.1, 99.5, 98.9],
    "name": {
        "firstName": "云",
        "lastName": "赵"
    }
}
  • 对应的每个字段映射(mapping):

    • age:类型为 integer;参与搜索,因此需要 index 为 true;无需分词器
    • weight:类型为 float;参与搜索,因此需要 index 为 true;无需分词器
    • isMarried:类型为 boolean;参与搜索,因此需要 index 为 true;无需分词器
    • info:类型为字符串,需要分词,因此是 text;参与搜索,因此需要 index 为 true;分词器可以用 ik_smart
    • email:类型为字符串,但是不需要分词,因此是 keyword;不参与搜索,因此需要 index 为 false;无需分词器
    • score:虽然是数组,但是我们只看元素的类型,类型为 float;参与搜索,因此需要 index 为 true;无需分词器
    • name:类型为 object,需要定义多个子属性
      • name.firstName;类型为字符串,但是不需要分词,因此是 keyword;参与搜索,因此需要 index 为 true;无需分词器
      • name.lastName;类型为字符串,但是不需要分词,因此是 keyword;参与搜索,因此需要 index 为 true;无需分词器

2. 索引库的 CRUD

  • 这里统一使用 Kibana 编写 DSL 的方式来演示。
2.1 创建索引库和映射
2.1.1 基本语法
  • 请求方式:PUT
  • 请求路径:/索引库名,可以自定义
  • 请求参数:mapping 映射
2.1.2 格式
PUT /索引库名称
{
  "mappings": {
    "properties": {
      "字段名":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "字段名2":{
        "type": "keyword",
        "index": "false"
      },
      "字段名3":{
        "properties": {
          "子字段": {
            "type": "keyword"
          }
        }
      },
      // ...略
    }
  }
}
2.1.3 示例
PUT /alex
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": "false"
      },
      "name":{
        "properties": {
          "firstName": {
            "type": "keyword"
          }
        }
      },
      // ... 略
    }
  }
}
2.2 查询索引库
2.2.1 基本语法
  • 请求方式:GET

  • 请求路径:/索引库名

  • 请求参数:无

2.2.2 格式
GET /索引库名
2.2.3 示例

在这里插入图片描述

2.3 修改索引库
  • 倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库一旦创建,无法修改 mapping

  • 虽然无法修改 mapping 中已有的字段,但是却允许添加新的字段到 mapping 中,因为不会对倒排索引产生影响。

2.3.1 语法说明
PUT /索引库名/_mapping
{
  "properties": {
    "新字段名":{
      "type": "integer"
    }
  }
}
2.3.2 示例

在这里插入图片描述

2.4 删除索引库
2.4.1 语法
  • 请求方式:DELETE

  • 请求路径:/索引库名

  • 请求参数:无

2.4.2 格式
DELETE /索引库名
  • 在 kibana 中测试:

在这里插入图片描述

2.5 总结
  • 索引库操作有哪些?

    • 创建索引库:PUT /索引库名
    • 查询索引库:GET /索引库名
    • 删除索引库:DELETE /索引库名
    • 添加字段:PUT /索引库名/_mapping

三、文档操作

1. 新增文档

1.1 语法
POST /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    "字段3": {
        "子属性1": "值3",
        "子属性2": "值4"
    },
    // ...
}
1.2 示例
POST /alex/_doc/1
{
    "info": "小帽课堂学习Java",
    "email": "alex@gmail.com",
    "name": {
        "firstName": "云",
        "lastName": "赵"
    }
}
1.3 响应

在这里插入图片描述

2. 查询文档

  • 根据 rest 风格,新增是 post,查询应该是 get,不过查询一般都需要条件,这里我们把文档 id 带上。
2.1 语法
GET /{索引库名称}/_doc/{id}
2.2 通过 kibana 查看数据
GET /alex/_doc/1
2.3 查看结果

在这里插入图片描述

3. 删除文档

  • 删除使用 DELETE 请求,同样,需要根据 id 进行删除:
3.1 语法
DELETE /{索引库名}/_doc/id值
3.2 示例
# 根据id删除数据
DELETE /alex/_doc/1

4. 修改文档

  • 修改有两种方式:

    • 全量修改:直接覆盖原来的文档
    • 增量修改:修改文档中的部分字段
4.1 全量修改
  • 全量修改是覆盖原来的文档,其本质是:

    • 根据指定的 id 删除文档
    • 新增一个相同 id 的文档
  • 注意:如果根据 id 删除时,id 不存在,第二步的新增也会执行,也就从修改变成了新增操作了。

4.1.1 语法
PUT /{索引库名}/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... 略
}

4.1.2 示例
PUT /alex/_doc/1
{
    "info": "小帽课堂学习高级Java",
    "email": "alex@gmail.com",
    "name": {
        "firstName": "云",
        "lastName": "赵"
    }
}
4.2 增量修改
  • 增量修改是只修改指定 id 匹配的文档中的部分字段。
4.2.1 语法
POST /{索引库名}/_update/文档id
{
    "doc": {
         "字段名": "新的值",
    }
}
4.2.2 示例
POST /alex/_update/1
{
  "doc": {
    "email": "ZhaoYun@gmail.com"
  }
}

5. 总结

  • 文档操作有哪些?

    • 创建文档:POST /{索引库名}/_doc/文档 id { json 文档 }
    • 查询文档:GET /{索引库名}/_doc/文档 id
    • 删除文档:DELETE /{索引库名}/_doc/文档 id
    • 修改文档:
      • 全量修改:PUT /{索引库名}/_doc/文档 id { json 文档 }
      • 增量修改:POST /{索引库名}/_update/文档 id { “doc”: {字段}}

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

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

相关文章

交流信号继电器 DX-31BJ/AC220V JOSEF约瑟 电压启动 面板嵌入式安装

DX系列信号继电器由矩形脉冲激磁,磁钢保持。本继电器为双绕组。工作线圈可为电压型,亦可为电流型。复归线圈为电压型。继电器的工作电流或工作电压为长脉冲,亦可为脉冲不小于20mS的短脉冲。 系列型号 DX-31B信号继电器DX-31BJ信号继电器 D…

【笔记】结合P02项目——maven继承与聚合

maven的继承关系 P02项目大概是这个样子,下图展示的是其父工程 父工程配置了parent依赖springb-boot-starter-parent,子工程配置其parant为父工程 子工程引用common子工程 maven的版本锁定 管理子工程的版本号问题 父工程添加dependencyManageMent…

【修车案例】一波形一案例(8)

背景介绍:有客户问到如果气缸盖垫片失效,冷却液压力应该会有明显上升,用虹科Pico示波器怎么做这个诊断?我们找到一辆气缸盖垫片和冷却套坏了的丰田AD发动机进行测试分析。 示波器诊断: A通道 - WPS500X压力传感器测冷…

主流超融合多副本机制缺陷与 SmartX 的临时副本策略

多副本机制是超融合软件常用的数据保护方式,可以为存储数据提供冗余保护——即使一个或部分副本异常,系统仍可通过健康副本进行副本恢复。但是,主流实现方式下,这一机制依旧无法避免“副本降级”期间带来的风险:在副本…

视频集中存储EasyCVR平台播放一段时间后出现黑屏是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Ubuntu开机无法进入系统,文件根系统目录空间不足导致?

前言: 自己电脑上装的是Win11和Ubuntu20双系统,平时就是切换着用。 偶然有次,Ubuntu提示文件根系统目录空间不足,自己没在意。 结果下次开机进入Ubuntu时候,芭比Q了。。进不了系统 这样的事情发生很多次了,…

Spring Boot自动配置原理、实战、手撕自动装配源码

Spring Boot自动配置原理 相比较于传统的 Spring 应用,搭建一个 SpringBoot 应用,我们只需要引入一个注解 SpringBootApplication,就可以成功运行。 前面四个不用说,是定义一个注解所必须的,关键就在于后面三个注解&a…

超好用!在线即可制作电子产品图册

​电子产品图册是展示产品特点、功能和外观的重要方式之一。通过图册,可以让客户更好地了解产品,增强信任感,从而促进销售。同时,对于企业来说,制作精美的电子产品图册也是展示企业文化和品牌形象的重要手段之一。 一、…

自然语言处理(一):RNN

「循环神经网络」(Recurrent Neural Network,RNN)是一个非常经典的面向序列的模型,可以对自然语言句子或是其他时序信号进行建模。进一步讲,它只有一个物理RNN单元,但是这个RNN单元可以按照时间步骤进行展开…

大语言模型(LLM)综述(六):大型语言模型的基准和评估

A Survey of Large Language Models 前言7 CAPACITY AND EVALUATION7.1 基本能力7.1.1 语言生成7.1.2 知识利用7.1.3 复杂推理 7.2 高级能力7.2.1 人类对齐7.2.2 与外部环境的交互7.2.3 工具操作 7.3 基准和评估方法7.3.1 综合评价基准7.3.2 评估方法 7.4 实证评估7.4.1 实验设…

HarmonyOS开发:UI开展前的阶段总结

前言 关于HarmonyOS,陆陆续续总结了有14篇的文章,大家可以发现,没有一篇是关于UI相关的,不是自己没有分享的打算,而是对于这些UI而言,官方都有着一系列的文档输出,如果我再一一的分享&#xff0…

Redis之Java操作连接操作Redis

前言 Java是一种强大的编程语言,而Redis是一个快速且具有高可扩展性的开源键值数据存储系统。使用Java操作Redis可以提高效率和性能,并且能够满足大规模数据存储和处理的需求。在本篇文章中,我们将介绍如何使用Java连接Redis,以及…

Day24力扣打卡

打卡记录 寻找峰值&#xff08;二分法&#xff09; class Solution { public:int findPeakElement(vector<int> &nums) {int left -1, right nums.size() - 1; // 开区间 (-1, n-1)while (left 1 < right) { // 开区间不为空int mid left (right - left) / …

键盘打字盲打练习系列之认识键盘——0

一.欢迎来到我的酒馆 盲打&#xff0c;yyds&#xff01; 目录 一.欢迎来到我的酒馆二.键盘规格三.键盘分区 二.键盘规格 经常看视频&#xff0c;看到别人在键盘上一通干净利索的操作&#xff0c;就打出想要的文字。心里突然来一句&#xff1a;卧槽&#xff0c;打字贼快啊&#…

Go 接口:nil接口为什么不等于nil?

本文主要内容:深入了解接口类型的运行时表示层。 文章目录 一、Go 接口的地位二、接口的静态特性与动态特性2.1 接口的静态特性与动态特性介绍2.2 “动静皆备”的特性的好处 三、nil error 值 ! nil四、接口类型变量的内部表示第一种&#xff1a;nil 接口变量第二种&#xff1a…

刷题笔记day14-二叉树01

前序遍历 前序遍历的方式是&#xff1a;根节点、左节点、右节点。 /*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/ import "container/list"func preorderTraversal(root *TreeNode…

VR全景如何应用在房产行业,VR看房有哪些优势

导语&#xff1a; 在如今的数字时代&#xff0c;虚拟现实&#xff08;VR&#xff09;技术的迅猛发展为许多行业带来了福音&#xff0c;特别是在房产楼盘行业中。通过利用VR全景技术&#xff0c;开发商和销售人员可以为客户提供沉浸式的楼盘浏览体验&#xff0c;从而带来诸多优…

「Verilog学习笔记」使用子模块实现三输入数的大小比较

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 题目要求编写子模块实现两个输入数的大小比较并输出较小值&#xff0c;可以使用if-else语句实现。同时要求在主模块中实现三个输入数值的大小比较&#xff0c;假设三个…

5分钟Python安装实战(MAC版本)

最近在学习Chatgpt接口&#xff0c;官方提供三种方式调用Chatgpt接口&#xff0c;分别是curl、python、node.js&#xff1a;具体介绍我放在下方图片 因为熟悉Python&#xff0c;所以我选择了python这种方式&#xff0c;顺便记录下安装过程&#xff0c;整体并不复杂&#xff0c;…

国产小体积超低成本电动车仪表智能刷卡解锁13.56M非接触式读写芯片CI522兼容替代RC522

Ci522电动车仪表一键启动芯片 Ci522是一个高度集成的&#xff0c;工作在13.56MHz的非接触式读写器芯片&#xff0c;阅读器支持ISO/IEC 14443 A/MIFARE。 无需外围其他电路&#xff0c;Ci522的内部发送器可驱动读写器天线与ISO/IEC 14443 A/MIFARE卡和应答机通信。接收器模块提…