Elasticsearch:为什么从 Elasticsearch 7.0.0 及更高版本中删除了映射类型 type?

news2025/1/23 1:11:06

在 Elasticsearch 7.0.0 或更高版本中创建的索引不再接受 _default_ 映射。 在 6.x 中创建的索引将继续在 Elasticsearch 6.x 中像以前一样运行。 7.0 中的 API 中已弃用类型 type,并对索引创建、放置映射、获取映射、放置模板、获取模板和获取字段映射 API 进行了重大更改。

什么是映射类型?

我们知道 Elasticsearch 是一个文档数据库,映射类型 type 表示被索引的文档或实体的类型,例如 youtube 索引可能具有用户类型和视频类型。你可以粗俗地理解 type 为关系数据库中的表格 table。

每个映射类型都可以有自己的字段,因此用户 user 类型可能有一个 full_name 字段、一个 user_name 字段和一个电子邮件字段,而视频 video 类型可以有一个 video_url 字段、一个 uploaded_at 字段,以及像用户 user 类型一样的 user_name 字段。

每个文档都有一个包含类型名称的 _type 元数据字段,并且可以通过在 URL 中指定类型名称将搜索限制为一种或多种类型:

GET youtube/user,video/_search
{
  "query": {
    "match": {
      "user_name": "kimchy"
    }
  }
}

文档的 _type 和 _id 字段组合生成 _uid 字段,有助于唯一标识存储在同一索引中具有相同 _id 的记录和文档。

下面的代码片段显示了不同类型的文档如何先前存储在同一索引中(请注意下面代码仅适用于于 7.0.0 之前的版本):

PUT youtube
{
  "mappings": {
    "user": {
      "properties": {
        "name": { "type": "text" },
        "user_name": { "type": "keyword" },
        "email": { "type": "keyword" }
      }
    },
    "video": {
      "properties": {
        "video_url": { "type": "text" },
        "user_name": { "type": "keyword" },
        "uploaded_at": { "type": "date" }
      }
    }
  }
}

上面的代码为 youtube 索引创建了一个映射,它有两种类型:user 和 video。

PUT youtube/user/debraj
{
  "name": "Debraj Bhal",
  "user_name": "debraj",
  "email": "debrajbhal@gmail.com"
}

PUT youtube/video/1
{
  "user_name": "debraj",
  "uploaded_at": "2017-10-24T09:00:00Z",
  "video_url": "https://myvideo.com"
}

上面的代码片段用于分别创建/更新 _id debraj 类型的 user 和 _id 1 类型的 video 的文档。

可以通过使用请求 URL 中的类型名称来检索特定类型的这些文档,如下面的代码片段所示:

GET youtube/video/_search
{
  "query": {
    "match": {
      "user_name": "debraj"
    }
  }
}

尽管映射类型 type 提供了如此出色的功能,但为什么它们被删除了?

在 Elasticsearch 中,索引类似于 SQL 数据库,类型类似于表。 但这个类比并不完全正确。 因为在 SQL 数据库中表是相互独立的,即不同表中同名的字段是完全独立的,互不依赖。

但在 Elasticsearch 索引中,不同映射类型中具有相同名称的字段在内部由相同的 Lucene 字段支持。 换句话说,使用上面的示例,用户类型中的 user_name 字段与视频类型中的 user_name 字段存储在完全相同的字段中,并且两个 user_name 字段在两种类型中必须具有相同的映射(定义,也即相同的数据类型)。

例如,当你想要定义 deleted 字段在同一索引中一种类型定义为 date 字段而在另一种类型中定义为 bool 字段时,这可能会导致失败。

此外,如果类型很少或没有共同字段,如果存储在同一索引中,会导致数据稀疏并干扰 Lucene 有效压缩文档的能力。 例如,在上面的示例中,只有 username 字段是常见的,因此对于视频类型,电子邮件和姓名类型字段没有用处,因此导致数据稀疏。

映射类型的替代方案

尽管映射类型存在一些缺点,但它们有助于组织链接数据。 因此,即使在 Elasticsearch 中删除映射类型之后,我们仍然可以通过两种方式实现类似的功能:

每个文档类型的索引:

第一种选择是为每个文档类型建立一个索引。 你可以将视频存储在视频 video 索引中,将用户存储在 user 索引中,而不是将视频和用户存储在单个 youtube 索引中。

自定义类型字段:

当然,集群中可以存在的主分片数量是有限的,因此你可能不希望为了仅包含几千个文档的集合而浪费整个分片。 在这种情况下,你可以实现自己的自定义类型字段,其工作方式与旧的 _type 类似。

PUT youtube
{
  "mappings": {
    "_doc": {
      "properties": {
        "type": { "type": "keyword" }, 
        "name": { "type": "text" },
        "user_name": { "type": "keyword" },
        "email": { "type": "keyword" },
        "video_url": { "type": "text" },
        "uploaded_at": { "type": "date" }
      }
    }
  }
}

在文档的映射定义中,我们添加了额外的字段 type。 该字段用于区分存储在同一索引中的不同类型的文档。 我们可以更新和查询这些文档,如下面的代码片段所示。

PUT youtube/_doc/user-debraj
{
  "type": "user", 
  "name": "Debraj Bhal",
  "user_name": "debraj",
  "email": "debrajbhal@gmail.com"
}

PUT youtube/_doc/video-1
{
  "type": "video", 
  "user_name": "debraj",
  "uploaded_at": "2017-10-24T09:00:00Z",
  "video_url": "https://myvideo.com"
}

GET youtube/_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "user_name": "debraj"
        }
      },
      "filter": {
        "match": {
          "type": "video" 
        }
      }
    }
  }
}

希望本文能帮助你详细了解 Elasticsearch 中的映射类型。

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

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

相关文章

战略文化派,战略形成是集体信念和愿景形成的过程

战略文化派:战略形成是集体信念和愿景形成的过程 趣讲大白话:在乎集体认同 【趣讲信息科技271期】 **************************** 关于企业文化的故事很多 比如:中国海尔砸冰箱后蜕变的文化 比如:日本的稻盛和夫倡导的东方利他文化…

Nacos安装

Windows安装 下载安装包 在Nacos的GitHub页面https://github.com/alibaba/nacos/releases,下载安装包 解压 将这个包解压到任意非中文目录下 目录说明: bin:启动脚本 conf:配置文件 配置 配置文件路径 默认端口为8848 启…

ResNet详解:网络结构解读与PyTorch实现教程

目录 一、深度残差网络(Deep Residual Networks)简介深度学习与网络深度的挑战残差学习的提出为什么ResNet有效? 二、深度学习与梯度消失问题梯度消失问题定义为什么会出现梯度消失?激活函数初始化方法网络深度 如何解决梯度消失问…

新KG视点 | Jeff Pan、陈矫彦等——大语言模型与知识图谱的机遇与挑战

OpenKG 大模型专辑 导读 知识图谱和大型语言模型都是用来表示和处理知识的手段。大模型补足了理解语言的能力,知识图谱则丰富了表示知识的方式,两者的深度结合必将为人工智能提供更为全面、可靠、可控的知识处理方法。在这一背景下,OpenKG组织…

HDU 1911 Showstopper 二分搜素

一、题目翻译 如果没有发现细微的形式,那么对大量数据集合进行数据挖掘是一件痛苦而又长时间的过程。 一家公司的某个软件成对的使用组件生成了大量的数据对象,因为是成对使用,所以每个数据对象出现的次数一定为偶数次,但是在多…

学生成绩管理系统【控制台+MySQL】(Java课设)

系统类型 控制台类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87738977 更多系统资源库地…

验收测试怎么做?需要怎么配合

验收测试的流程,是验证系统是否达到了用户需求规格说明书(可能包括项目或产品验收准则)中的要求,测试试图尽可能地发现软件中存留的缺陷,从而为软件进一步改善提供帮助,并保证系统或软件产品Z终被用户接受。…

如何用 QGIS 下载高清天地图影像机,同时解决下载质量差的问题!

使用 QGIS 我们可以获得下面这种图像,既有大范围,又有更高的细节(地图级别),基本上把整个苏州市中心城区的建筑物都囊括进去了。 还可以下载大范围、高清晰度的各种在线卫星底图服务的影像,比如大面积的哨兵2影像,但国外的服务器一般都很烂,不可能是电信、移动的问题,…

Python环境下载安装使用

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

03.OA项目之我的会议(查询会议排座送审)

目录 会议查询 会议排座 会议送审 思路: 关键性会议SQL的编写后台实现前台实现 会议查询 MeetingInfoDao.java // 通用的会议查询SQL语句,包含会议信息表数据,主持人姓名、审批人姓名、会议状态private String getSQL() {return "…

四、MySQL(表操作)如何添加字段?修改表?删除字段?修改表名?删除表?格式化某张表?

1、添加字段 (1)基础语法: alter table 表名 add 字段名 类型名(长度) [comment注释] [约束]; (2)示例:添加nickname这个字段 2、修改表 修改表中某个字段的【数据类型】/【数据类型&字段名】 &…

【视频录制】MAC下录频软件对比

目录 各软件对比 OBS FiImage Omi录频专家 好录 各软件对比 名称下载地址优点缺点OBSOpen Broadcaster Software | OBS 1. 免费使用 2. 视频高清 3. 可做直播 1. 没有暂停继续 2. 开启没有缓冲时间,需要手动剪辑片头片尾 3. 配置音频麻烦 4. 有时会CPU很高卡死…

图像扭曲之锯齿

源码: void wave_sawtooth(cv::Mat& src,cv::Mat& dst,double amplitude,double wavelength) {dst.create(src.rows, src.cols, CV_8UC3);dst.setTo(0);double xAmplitude amplitude;double yAmplitude amplitude;int xWavelength wavelength;int yWave…

AES+base64+远程加载----ConsoleApplication811项目

ConsoleApplication9.cpp // ConsoleApplication9.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> #include <Windows.h> #include <wininet.h> #include "base64.h" #include "AES.h" …

浅析三维模型OBJ格式轻量化压缩集群处理方法

浅析三维模型OBJ格式轻量化压缩集群处理方法 三维模型的OBJ格式轻量化压缩是指通过一系列技术和方法将三维模型的文件大小进一步减小&#xff0c;以提高模型在计算机中的加载、传输和存储效率。集群处理技术是指利用多台计算机构成的集群来并行处理任务&#xff0c;以加速计算过…

FPGA GTX全网最细讲解,aurora 8b/10b协议,HDMI板对板视频传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、GTX 全网最细解读GTX 基本结构GTX 发送和接收处理流程GTX 的参考时钟GTX 发送接口GTX 接收接口GTX IP核调用和使用 4、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条视频数据组包GTX aurora 8b/10b数据…

激活函数总结(二十三):激活函数补充(Piecewise Linear Unit、CLL)

激活函数总结&#xff08;二十三&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Piecewise Linear Unit激活函数2.2 Complementary Log-Log (CLL)激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU…

数学建模:BP神经网络模型及其优化

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 BP神经网络算法流程代码实现 神经网络的超参数优化代码实现 神经网络的分类 BP神经网络 算法流程 设 x 1 , x 2 , . . . , x i x_1,x_2,...,x_i x1​,x2​,...,xi​ 为输入变量&#xff0c; y y y…

图像分类学习笔记(六)——ResNeXt

一、要点 ResNeXt是ResNet的小幅升级&#xff0c;更新了block 左边&#xff08;ResNet的block/50/101/152层&#xff09;&#xff1a; 对于输入通道为256的特征矩阵&#xff0c;首先使用64个11的卷积核进行降维&#xff0c;再通过64个33的卷积核处理&#xff0c;再通过256个1…

volatile考点分析

今天我们学习并发编程中另一个重要的关键字volatile&#xff0c;虽然面试中它的占比低于synchronized&#xff0c;但依旧是不可忽略的内容。 关于volatile&#xff0c;我收集到了8个常见考点&#xff0c;围绕应用&#xff0c;特点和实现原理。 volatile有什么作用&#xff1f…