【ElatsticSearch】ES索引库与文档的增删改查

news2025/1/4 15:55:55

文章目录

  • 一、操作索引库
    • 1、mapping映射属性
    • 2、索引库的CRUD
  • 二、文档操作
    • 1、新增文档
    • 2、查询文档
    • 3、删除文档
    • 4、修改文档
    • 5、注意点

一、操作索引库

在这里插入图片描述

1、mapping映射属性

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

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

举例:

{
    "age": 23,
    "weight": 52.1,
    "isMarried": false,
    "info": "难说",
    "email": "9527@csdn.cn",
    "score": [99.1, 99.5, 98.9],
    "name": {
        "firstName": "哈",
        "lastName": "哈"
    }
}

注意ES中并没有数组类型,"score": [99.1, 99.5, 98.9] ,但是允许某个类型的字段有多个值,只管括号里元素的类型,即这里的score是double类型。

2、索引库的CRUD


创建索引库:

ES中通过Restful请求操作索引库、文档。请求内容用DSL语句来表示。创建索引库和mapping的DSL语法如下:

PUT /索引库名称
{
  "mappings": {
    "properties": {
      "字段名1":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "字段名2":{
        "type": "keyword",
        "index": "false"
      },
      "字段名3":{
        "properties": {
          "子字段": {
            "type": "keyword"
          }
        }
      },
      // ...略
    }
  }
}

示例:

PUT /code9527
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"  #index用默认的,这里不写了
      },
      "email":{
        "type": "keyword",  #email肯定不能分词,类型为字符串下的keyword
        "index": "false"  # keyword不用指定分词器
      },
      "name":{
        "properties": {   # name字段有嵌套
          "firstName": {
            "type": "keyword"
          },
          "lastName": {
            "type": "keyword"
          }
        }
      },
      // ... 略
    }
  }
}

在这里插入图片描述
创建的这一整个索引,也就像MySQL中的一张表了。


查询索引库:

GET /索引库名 

举例:
在这里插入图片描述


删除索引库:

DELETE /索引库名 

举例:

在这里插入图片描述

修改索引库:

ES不支持修改索引库,但可以添加新的字段,如:

PUT /索引库名/_mapping
{
  "properties": {
    "新字段名":{   # 注意一定是新字段,否则ES会认为你在修改索引库,会拒绝
      "type": "integer"
    }
  }
}

示例:

PUT /code9527/_mapping
{
  "properties": {
    "age":{
      "type": "integer"
    }
  }
}

在这里插入图片描述
小结:

在这里插入图片描述

二、文档操作

1、新增文档

类比往MySQL的table里insert数据,语法:

# 文档id不写自动生成,但不建议这么写
POST /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    "字段3": {
        "子属性1": "值3",
        "子属性2": "值4"
    },
    // ...
}

举例:

POST /code9527/_doc/1
{
    "info": "code9527",
    "email": "9527@csdn.cn",
    "name": {
        "firstName": "code",
        "lastName": "9527"
    }
}

在这里插入图片描述

2、查询文档

语法:

GET /索引库名/_doc/文档id 

举例:
在这里插入图片描述

3、删除文档

语法:

DELETE /索引库名/_doc/文档id 

举例:
在这里插入图片描述

4、修改文档


全量修改:

根据传入的id,删除旧文档,再添加新文档(delete from where xx=文档id + insert table …):

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

# 和新增文档语法一样,只是请求方式从POST变成了PUT

举例:

PUT /code9527/_doc/1
{
    "info": "code9527+++",
    "email": "9527@csdn.cn",
    "name": {
        "firstName": "code",
        "lastName": "9527"
    }
}

在这里插入图片描述

注意,当传入的文档id不存在,先删后改就成了空删,相当于增加文档了,是个新增操作了。


增量修改:

修改指定字段值,语法:

POST /索引库名/_update/文档id
{
    "doc": {
         "字段名": "新的值",
    }
}

举例:

POST /code9527/_update/1
{
  "doc": {
    "email": "code9527@csdn.cn"
  }
}

在这里插入图片描述

5、注意点

当向ES插入的文档中,字段没有对应的mapping,如:

POST /code9527/_doc/2
{
    "info": "code9527",
    "email": "9527@csdn.cn",
    "name": {
        "firstName": "code",
        "lastName": "9527"
    },
    "city":"天津",  # 没有mapping的字段
    "birtyday":"2000-01-28"  # 多了字段
}

结果:
在这里插入图片描述
GET一下:

在这里插入图片描述
即:**插入文档时,es会检查文档中的字段是否有mapping,如果没有则按照默认mapping规则来创建索引。**规则如下:
在这里插入图片描述
如果默认mapping规则不符合你的需求,一定要自己设置字段mapping


小结:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 4 日论文合集)

文章目录 一、分割|语义相关(18篇)1.1 TomatoDIFF: On-plant Tomato Segmentation with Denoising Diffusion Models1.2 CGAM: Click-Guided Attention Module for Interactive Pathology Image Segmentation via Backpropagating Refinement1.3 RefSAM: Efficiently Adapting …

Python实现通过GUI界面提交参数,来启动python脚本

前言 本文是该专栏的第30篇,后面会持续分享python的各种干货知识,值得关注。 假设现在有如下需求,用python写一个GUI界面,在该GUI界面上输入参数信息,然后再点击GUI界面上的提交按钮,启动并执行对应的python脚本。换言之,在GUI界面上输入的参数信息传递给对应的python脚…

图像处理常用算法(基础)

同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。有可能有边缘的地方并非边界,也有可能边界的地方并无边缘,…

【动态规划算法练习】day14

文章目录 一、97. 交错字符串1.题目简介2.解题思路3.代码4.运行结果 二、712. 两个字符串的最小ASCII删除和1.题目简介2.解题思路3.代码4.运行结果 三、718. 最长重复子数组1.题目简介2.解题思路3.代码4.运行结果 总结 一、97. 交错字符串 1.题目简介 97. 交错字符串 给定三个…

嵌入式如何面试10家公司,拿到9个offer的?

又快到一年一度的秋招季,不少同学私信学长吐苦水,明明在各大招聘网站上海投了那么多家公司,收到的面试通知却屈指可数,好不容易拿到面试机会,却在一面就扑街...... 很多同学能力还行,但是经验谈不上很出彩&…

【IMX6ULL驱动开发学习】15.IMX6ULL驱动开发问题记录(sleep被kill_fasync打断)

发现问题的契机: 学习异步通知的时候,自己实现一个功能:按键控制蜂鸣器,同时LED灯在闪烁 结果:LED好像也同时被按键控制了 最后调试结果发现: 应用层的sleep被驱动层的kill_fasync打断,所以sle…

GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法

文章目录 GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法概述笔记老国标 - 判断线材标称直径的方法END GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法 概述 在淘宝上买线材, 买了RV1.5/RV1.0各买了4种颜色(红/黑/黄绿/蓝). 看到评论区, 有人留言, 说线径…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 3 日论文合集)

文章目录 一、检测相关(9篇)1.1 Federated Ensemble YOLOv5 - A Better Generalized Object Detection Algorithm1.2 Zero-shot Nuclei Detection via Visual-Language Pre-trained Models1.3 Federated Object Detection for Quality Inspection in Shared Production1.4 Comp…

Raw Socket 之网络层数据获取

目录 简介正常使用tcpdump程序与分析报文理解参考 简介 针对网络包,我们一般的发送接收直接使用的是应用层,此时无法分辨接收为广播包还是单播包,为了能够分辨出接收到的是否为广播包,需要接收数据链路层的数据或者网络层的数据。…

ct.js笔记-加载字体时字体名不能包含中文

这个和Qt很像,在开发过程中尽量避免使用中文。如下: 这个AaJH中文,在加载时: this.nickNameLabel new PIXI.Text(Your text here, ct.styles.get(AaJH中文)); this.addChild(this.nickNameLabel);this.nickNameLabel.x 30; thi…

UE5接入在线直播视频源,如hls(m3u8)格式

文章目录 1.实现目标2.实现过程2.1 VlcMedia插件重编译2.2 UE5接入在线直播2.3 创建材质3.参考资料1.实现目标 通过重编译VlcMedia插件,以支持在线直播视频在UE5中的播放,GIF动图如下: 2.实现过程 本文主要包括插件的重编译、在线直播视频的接入,以及材质的创建三个部分。…

基于Java办公用品管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

atomic原子操作

当一个程序中的两个线程同时向这个程序里的全局变量增加数时会发生什么? 理论上来说,应该是200000,但是最后结果不是200000。 这是多个线程同时操作一个全局变量引起的错误。 要解决这个错误,用互斥锁即可: 这样就可以…

【计算机视觉】DETR 系列的最新综述!

论文地址: https://arxiv.org/pdf/2306.04670.pdf项目地址: https://github.com/mindgarage-shan/trans_object_detection_surveyTransformer在自然语言处理(NLP)中的惊人表现,让研究人员很兴奋地探索它们在计算机视觉任务中的应用。与其他…

Spark | 性能调优原理与步骤 | 案例讲解

🔥 跟着梁哥打卡一波spark的性能调优~ 文章目录 1、Spark调优原理与步骤2、Spark任务UI监控3、Spark调优案例3.1、资源配置优化3.2、利用缓存减少重复计算3.3、数据倾斜调优3.4、broadcastmap代替join3.5、reduceByKey/aggregateByKey代替groupByKey 1、…

为什么门店需要店务管理系统?店务管理系统的重要性有哪些?

随着经济市场的回暖,实体行业特别是门店都需要更好的营销手段以留住客户、转化客户,因此需要一个好的工具来完成对于店铺经营数据的实时了解和管理,这就需要用到店务经营管理系统。如蚓链数字化店务管理系统具备股东营销系统、收银系统及进销…

Linux5.12 rsync 远程同步

文章目录 计算机系统5G云计算第四章 LINUX rsync 远程同步一、rsync概述二、配置 rsync 服务1.配置rsync源服务器2.发起端 三、发起端配置 rsyncinotify1.修改rsync源服务器配置文件2.调整 inotify 内核参数3.安装 inotify-tools4.在另外一个终端编写触发式同步脚本 计算机系统…

7.4.2 【Linux】特殊设备 loop 挂载 (镜像文件不烧录就挂载使用)

挂载光盘/DVD镜像文件 如此一来我们不需要将这个文件烧录成为光盘或者是 DVD 就能够读取内部的数据了。 创建大文件以制作 loop 设备文件! 创建大型文件 假设我要创建一个空的文件在 /srv/loopdev ,那可以这样做: 将 512 块,每…

爱普生L358打印机墨仓有墨水但墨水指示灯常亮

产品类型:墨仓式多功能一体机 最大处理幅面:A4 涵盖功能:打印/复印/扫描 黑白打印速度:9ipm 耗材类型:分体式墨盒 打印分辨率:57601440dpi 问题描述: 爱普生L358彩…

RK3399平台开发系列讲解(入门篇)为什么需要学习Linux驱动

🚀返回专栏总目录 文章目录 一、为什么需要学习Linux驱动二、如何学习Linux驱动开发三、Linux 驱动学习的难点四、学习资料沉淀、分享、成长,让自己和他人都能有所收获!😄 一、为什么需要学习Linux驱动 学习Linux驱动开发有以下几个重要的原因: 深入理解系统底层:学习L…