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

这篇具有很好参考价值的文章主要介绍了Elasticsearch:为什么从 Elasticsearch 7.0.0 及更高版本中删除了映射类型 type?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch:为什么从 Elasticsearch 7.0.0 及更高版本中删除了映射类型 type?,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索

在 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 中的映射类型。文章来源地址https://www.toymoban.com/news/detail-688469.html

到了这里,关于Elasticsearch:为什么从 Elasticsearch 7.0.0 及更高版本中删除了映射类型 type?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • this.viewer.entities.removeById()循环删除为什么删除不完

    在 Cesium 中, viewer.entities.removeById() 方法用于从场景中移除指定 ID 的实体。如果您在循环中使用这个方法来删除多个实体,有可能会出现删除不完全的问题,这是因为在删除实体的同时,实体数组的长度在不断减小,可能会导致索引错位或者遗漏某些实体。 要安全地从实体集

    2024年02月11日
    浏览(28)
  • Elasticsearch为什么快?

    概括的说,一个优秀的搜索引擎的设计,至少应该具备以下几点要求: 高效的压缩算法 快速的编码和解码算法 合理的数据结构 通用最小化算法 结合以上几点,后面我将通过一个案例来讲解,倒排索引的基本原理是什么。在了解“倒排索引”之前,我们先来看一下何为“索

    2024年02月04日
    浏览(31)
  • 在容器镜像中为了安全为什么要删除 setuid 和 setgid?

    在容器镜像中删除 setuid(set user ID)和 setgid(set group ID)权限通常是出于安全考虑。这两个权限位允许进程在执行时以文件所有者或文件所属组的身份运行,而不是以调用进程的用户身份运行。 删除 setuid 和 setgid 权限的主要原因包括: 减少潜在的权限滥用: 如果容器中的

    2024年02月20日
    浏览(25)
  • Elasticsearch:索引状态是红色还是黄色?为什么?

    在我之前文章 “Elasticsearch:如何调试集群状态 - 定位错误信息” 中,我有详细介绍如何调试集群状态。在今天的文章中,我将详细介绍如何故障排除和修复索引状态。 Elasticsearch 是一个伟大而强大的系统,特别是创建一个可扩展性极强的分布式数据存储,并自动跟踪、管理

    2023年04月09日
    浏览(30)
  • 苹果电脑为什么无法删除U盘的文件?mac怎么删除移动硬盘里的文件

      “ 我将移动硬盘插入Mac电脑上,准备删除上面不需要的文件,来腾出足够的空间,可是我竟然不能直接删除这些文件,没有删除的选项供我选择,我也不能够直接把要删除的文件拖到废纸篓,这是怎么回事呢? 苹果电脑为什么无法删除U盘的文件 ?” 很多用户都会遇到类

    2024年02月06日
    浏览(52)
  • Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?

    Elasticsearch 从 7.3 版本开始支持向量搜索。从 8.0 开始支持带有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已经是全球下载量最多的向量数据库。它允许使用密集向量和向量比较来搜索文档。 向量搜索在人工智能和机器学习领域有许多重要的应用。 有效存储和检索向量的数据库对于

    2024年02月08日
    浏览(44)
  • 电脑硬盘文件数据误删除/格式化为什么可以恢复? 怎么恢复?谈谈文件删除与恢复背后的原理

    主页 : 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止私自转载。 内容摘要 1. 硬盘数据丢失场景 2. 硬盘数据丢失可以恢复吗? 3. 数据丢失怎么恢复? 3.1 第一款、嗨格式数据恢复大师  3.2 第二款、360安全卫士 3.3 第三款、

    2024年02月09日
    浏览(48)
  • 为什么删除Windows 11上的Bloatware可以帮助加快你的电脑速度

    如果你感觉你的电脑迟钝,彻底清除软件会有所帮助,而且这个过程对Windows用户来说越来越容易。 微软正在使删除以前难以删除的其他预装Windows应用程序成为可能。专家表示,这项新功能可能会改变用户的游戏规则。 科技公司Infatica的主管Vladimir Fomenko在接受Lifewire电子邮件

    2024年02月10日
    浏览(44)
  • 为什么选择elasticsearch分布式搜索引擎

    elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在CSDN上搜索代码 在电商网站搜索商品 在百度搜索答案 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监

    2024年02月12日
    浏览(38)
  • ElasticSearch(七):ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包