返回顶部
首页 > 资讯 > 精选 >Elasticsearch的删除映射类型怎么操作
  • 737
分享到

Elasticsearch的删除映射类型怎么操作

2023-06-30 05:06:05 737人浏览 泡泡鱼
摘要

这篇文章主要讲解了“elasticsearch的删除映射类型怎么操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Elasticsearch的删除映射类型怎么操作”吧!一 前言在elasti

这篇文章主要讲解了“elasticsearch的删除映射类型怎么操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Elasticsearch的删除映射类型怎么操作”吧!

    一 前言

    在elasticsearch7.0.0或更高的版本中创建索引仅能包含单个映射类型。在具有多种映射类型的5.x版本中创建的索引将继续像以前一样在elasticsearch7.x中运行。类型将在elasticsearch7.0.0中的api中弃用,并在8.0.0中完全删除。

    二 什么是映射类型?

    从elasticsearch发布以来,每个文档都存储在单个索引中并分配了单个映射类型。映射类型用于表示要编制索引的文档或实体的类型。例如微博(twitter)索引可能具有用户(user)类型和推文(tweet)两个类型。

    每种映射类型都可以有自己的字段,因此用户(user)类型可能有 full_name、user_name、email字段;而推文(tweet)类型可能有content、tweet_at字段和用户(user)类型的user_name字段。每个文档都有一个_type包含类型名称的元字段,通过在URL中指定类型名称,搜索可以限制为一种或多种类型:

    GET twitter/user,tweet/_search{  "query":{    "match":{      "user_name":"kimchy"    }  }}

    _type字段与文档组合_id以生成_uid字段,因此具有相同类型的文档_id可以存储在单个索引中。
    映射类型也用于在文档中建立父子关系,因此类型的文档question可以是类型文档的父类answer
    扯了半天淡,一切不都是挺好的嘛?那还为啥要删除映射类型呢?

    三 为什么要删除映射类型?

    最初(其实到现在),为了便于理解elasticsearch的数据组织,通常拿elasticsearch和关系型数据库做对比,比如我们谈到一个es索引(index)时,通常将它比喻为类似于sql数据库中的database,而类型(type)等同于SQL数据库中的表。

    这真是一个糟糕的比喻!让我们有了错误理解。因为在SQL数据库中,表彼此独立,一个表中的字段与另一个表中具有相同名称的字段无关,而映射类型中的字段不是这种情况。

    在elasticsearch的索引中,不同映射类型具有相同名称的字段在内部由相同的Lucene字段支持。换句话说,使用上面的示例,用户(user)类型中的user_name字段存储在和推文(tweet)类型中的user_name字段完全相同的字段中,而且两种类型中的user_name字段必须具有相同的映射(定义)。

    当我们希望删除一个类型的日期字段和同一个索引中另一个类型的布尔字段时,这可能会导致挫败感(可以理解为删除失败)。

    最重要的是,在同一索引中存储具有很少或没有共同字段的不同实体会导致稀疏数据并干扰Lucene有效压缩文档的能力。

    出于这些原因,我们决定从elasticsearch中删除映射类型的概念。

    四 映射类型的替代方法

    4.1 将映射类型分开存储在索引中

    第一种方法是每个文档类型都有一个索引,例如微博(twitter)索引中,我们可以将推文(tweet)类型和用户(user)类型分开,分别存储在独立的索引中。这样两个相互的索引就不会引起字段冲突了。

    这中方法有两个好处:

    • 数据更可能是密集的,因此受益于Lucene中使用的压缩技术。

    • 用于全文搜索评分的词条统计将会更精确,应为同一索引中的所有文档都代表单个实体。

    每个索引的大小可以根据其包含的文档数量进行适当的调整,比如我们为用户(user)类型分配较少的主分片,而为推文(tweet)类型分配较多的主分片。

    4.2 自定义类型字段回到顶部

    当然了,集群中可以存储多少个主分片是有限制的,我们不希望仅为几千个文档的集合而浪费整个分片。在这种情况下,我们可以实现自己的自定义type字段,该字段的工作方式与旧的_type相似。
    还是上面微博(twitter)例子,最初,它的映射类型看起来是这样的:

    PUT twitter{  "mappings": {    "user":{      "properties":{        "name":{          "type":"text"        },        "user_name":{          "type":"keyWord"        },        "email":{          "type":"keyword"        }      }    },    "tweet":{      "properties":{        "content":{          "type":"text"        },        "user_name":{          "type":"keyword"        },        "tweet_at":{          "type":"date"        }      }    }  }}PUT twitter/user/kimchy{  "name":"狗子",  "user_name":"二狗子",  "email":"dog@twodog.com"}PUT twitter/tweet/1{  "name":"kimchy",  "tweet_ad":"2019-04-30T10:26:20Z",  "content":"单身狗求包养"}GET twitter/tweet/_search{  "query": {    "match": {      "user_name": "kimchy"    }  }}

    如上示例,请在5.x及以下版本测试
    我们也可以通过添加自定义type字段来实现相同目的:

    PUT twitter{  "mappings": {    "doc":{      "properties":{        "type":{          "type":"keyword"        },        "name":{          "type":"text"        },        "user_name":{          "type":"keyword"        },        "email":{          "type":"text"        },        "content":{          "type":"text"        },        "tweet_at":{          "type":"date"        }      }      }  }}PUT twitter/doc/user-kimchy{  "type":"user",  "name":"狗子",  "user_name":"二狗子",  "email":"dog@twodog.com"}PUT twitter/doc/tweet-1{  "type":"tweet",  "user_name":"kimchy",  "tweet_at":"2019-04-30T10:26:20Z",  "content":"单身狗求包养"}GET twitter/_search{  "query": {    "bool": {      "must":[        {          "match": {            "user_name": "kimchy"          }        }      ],      "filter": {        "match":{          "type":"tweet"        }      }    }  }}

    上述示例6.5.4版本运行无误。

    五 没有映射类型的父/子

    以前,通过将一个映射类型设置为父级,将一个或多个其他映射类型设置为子级来表示父子关系。现在,没有了多类型,我们就不能再使用这种语法了。除了表示文档之间的关系方式已改为使用新的join字段之外,父子特征将继续像以前一样运行。

    六 删除映射类型的计划

    这个删除映射类型的计划,对于用户来说是一个很大的变化,所以我们试图让它尽可能轻松,更改将如下所示:

    在elasticsearch6.6.0中:

    • index.mapping.single_type:true在索引上设置将启用在6.0中强制执行的单索引类型。

    • 父子的join字段替换可用于在5.6中创建索引。

    在elasticsearch7.x中:

    • 在5.x中创建的索引将继续在6.x中运行,就像在5.x中一样。

    • 在6.x中创建的索引仅允许每个索引使用单一类型,任何字段都可以用于该类型,但必须是唯一的。

    • _type名称可以不再与_id组合形成_uid字段,_uid字段已成为_id字段的别名。

    • 新索引不再支持旧的父/子关系,而是应该使用连接字段。

    • 不推荐使用_default_mapping类型。

    • 在6.7中,索引创建、索引模板和映射API支持查询字符串参数(include_type_name),该参数仅表示请求和响应是否应该包含类型名称,默认为true,应该设置为一个显式值,以便准备升级到7.0。未设置include_type_name将导致一个弃用警告,没有显式类型的索引将使用默认的类型名称_doc

    在elasticsearch7.x中:

    • 不推荐在请求中指定类型。例如,索引文档不再需要文档类型。对于自动生成的id,新的索引API在显式ids和POST {index_name}/_doc的情况下是PUT {index_name}/_doc/{id}

    • 索引创建,索引模板和映射API中的include_type_name参数将默认为false,未设置参数将导致启动警告。

    • 删除了_default_mapping类型。

    在elasticsearch8.x中:

    • 不在支持在请求中指定类型。

    • include_type_name参数已删除。

    七将多类型索引迁移到单一类型

    Reindex API可用于将多类型索引转换为单类型索引。下面的例子可以在Elasticsearch 5.6或Elasticsearch 6.x中使用。在6.x中,不需要指定index.mapping。默认为单一类型。

    7.1 每种文档类型的索引

    第一个示例将微博(twitter)索引拆分为推文(tweets)索引和用户(users)索引:

    PUT users{  "mappings": {    "user":{      "properties":{        "name":{          "type":"text"        },        "user_name":{          "type":"keyword"        },        "email":{          "type":"keyword"        }      }    }  }}PUT tweets{  "mappings": {    "tweet":{      "properties":{        "content":{          "type":"text"        },        "user_name":{          "type":"keyword"        },        "tweet_at":{          "type":"date"        }      }    }  }}POST _reindex{  "source": {    "index":"twitter",    "type":"user"  },  "dest": {    "index":"users"  }}POST _reindex{  "source": {    "index":"twitter",    "type":"tweet"  },  "dest": {    "index": "tweets"  }}

    上述代码在6.5.4版本中运行无误。

    上述的示例意思是,在之前我们在微博(twitter)索引中,有两个类型(tweet和user)。

    现在要将两个类型分开,成为独立的索引。

    所以,首先先创建出各自的索引(tweets和users),然后通过POST _reindex来完成迁移工作。

    7.2 自定义类型字段

    第二个示例添加自自定义的type字段,并将其设置为原始值_type

    它还添加了类型到id,以防有任何不同类型的文档具有冲突的id:

    PUT new_twitter{  "mappings": {    "doc":{      "properties":{        "type":{          "type":"keyword"        },        "name":{          "type":"text"        },        "user_name":{          "type":"keyword"        },        "email":{          "type":"keyword"        },        "content":{          "type":"text"        },        "tweet_at":{          "type":"date"        }      }    }  }}POST _reindex{  "source": {    "index":"twitter"  },  "dest":{    "index": "new_twitter"  },  "script": {    "source": """      ctx._source.type = ctx._type;      ctx._id = ctx._type + "-" + ctx._id;      ctx._type = "doc";    """  }}

    上述代码在6.5.4版本运行无误。

    感谢各位的阅读,以上就是“Elasticsearch的删除映射类型怎么操作”的内容了,经过本文的学习后,相信大家对Elasticsearch的删除映射类型怎么操作这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: Elasticsearch的删除映射类型怎么操作

    本文链接: https://lsjlt.com/news/327553.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Elasticsearch的删除映射类型怎么操作
      这篇文章主要讲解了“Elasticsearch的删除映射类型怎么操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Elasticsearch的删除映射类型怎么操作”吧!一 前言在elasti...
      99+
      2023-06-30
    • Elasticsearch的删除映射类型操作示例
      目录一 前言二 什么是映射类型?三 为什么要删除映射类型?四 映射类型的替代方法4.1 将映射类型分开存储在索引中4.2 自定义类型字段回到顶部五 没有映射类型的父/子六 删除映射类...
      99+
      2024-04-02
    • Elasticsearch映射字段数据类型及管理的方法
      本篇内容主要讲解“Elasticsearch映射字段数据类型及管理的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Elasticsearch映射字段数据类型及管理的方法”吧!Elastics...
      99+
      2023-06-30
    • TypeScript 映射类型是怎样的
      这期内容当中小编将会给大家带来有关TypeScript 映射类型是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言:TypeScript 的官方文档早已更新,但我能找到的中文文档都还停留...
      99+
      2023-06-22
    • Python映射类型中dict怎么用
      这篇文章给大家分享的是有关Python映射类型中dict怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。映射类型 - dict字典可用多种方式来创建:使用花括号内以逗号分隔键: 值对的方式: {&ls...
      99+
      2023-06-29
    • GO将mysql 中 decimal 数据类型映射到 protobuf的操作方法
      目录protobuf中 float与double1、如何在rpc中优雅取出dcemial类型2、在rpc中 proto我们定义如下2.1、proto - double2.2、proto - float3、在go-zero...
      99+
      2024-04-02
    • GO将mysql 中 decimal 数据类型映射到 protobuf的操作方法
      目录protobuf中 float与double1、如何在rpc中优雅取出dcemial类型2、在rpc中 proto我们定义如下2.1、proto - double2.2、prot...
      99+
      2024-04-02
    • mybatis怎么利用resultMap复杂类型list映射
      这篇文章主要介绍“mybatis怎么利用resultMap复杂类型list映射”,在日常操作中,相信很多人在mybatis怎么利用resultMap复杂类型list映射问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
      99+
      2023-06-20
    • 怎么删除redis的set类型key
      要删除Redis的set类型key,可以使用以下命令:1. 使用DEL命令删除key:   ```   DEL ...
      99+
      2023-08-30
      redis
    • 云服务器映射本地文件夹怎么删除
      如果您要删除云服务器的映射文件夹,请按照以下步骤操作: 在本地计算机上运行命令: ping /www.cloudflarecloudflare.com (你的云服务器提供商提供的命令) 如果您的网络连接是拨号或虚拟专用网络(VPN),...
      99+
      2023-10-26
      文件夹 服务器
    • MybatisPlus怎么自定义TypeHandler映射JSON类型为List
      这篇文章将为大家详细讲解有关MybatisPlus怎么自定义TypeHandler映射JSON类型为List,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。自定义TypeHandler映射JSON类型为Li...
      99+
      2023-06-28
    • 云服务器映射本地文件夹怎么删除啊
      如果您要删除云服务器中的文件,以下是一些步骤: 首先,您需要将云服务器和本地磁盘映射相连接。这将告诉您如何打开映射文件夹和文件,并允许您删除其中的文件。如果您需要将云服务器中的文件移动到本地磁盘中,您需要将云服务器连接到本地文件夹上。 ...
      99+
      2023-10-26
      文件夹 服务器
    • 云服务器映射本地文件夹怎么删除掉
      如果您要删除映射本地文件夹中的内容,可以按照以下步骤进行操作: 1.首先,确保映射的文件夹已经正确地从系统文件夹中被删除,例如在C:UsersAdministrator中删除C:UsersAdministrators Local Sett...
      99+
      2023-10-26
      文件夹 删除掉 服务器
    • java技巧:反射判断field类型的操作
      JAVA 反射机制中,Field的getModifiers()方法返回int类型值表示该字段的修饰符。 其中,该修饰符是java.lang.reflect.Modifier的静态属性...
      99+
      2024-04-02
    • javascript怎么实现删除操作
      在Web应用程序中,删除数据是一个非常常见的操作。无论是删除一个记录,还是删除一个文件或目录,我们都需要一个能够安全、简单地执行这个操作的解决方案。而使用javascript语言可以实现这个功能。一、删除确认在删除之前,通常需要让用户确认他...
      99+
      2023-05-14
    • php事务删除怎么操作
      本教程操作环境:Windows7系统、PHP8.1版、Dell G3电脑。php事务删除怎么实现?php 事务处理transactionMySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要...
      99+
      2022-11-22
      事务 php
    • 云服务器映射本地文件夹怎么删除不了
      如果您想删除云服务器的映射文件夹,但是映射文件夹已经存在,那么可能是因为您在映射时设置了禁用了对它的访问。以下是几种删除不了映射文件夹的解决方法: 重新映射:您可以尝试重新映射该映射文件夹,这需要您重启云服务器。 删除云服务器的文件夹:...
      99+
      2023-10-26
      文件夹 服务器
    • 云服务器映射本地文件夹怎么删除掉啊
      一、云服务器映射本地文件夹 要删除云服务器中的文件夹,可以使用“localhost”命令,在命令行中输入“localhost”并按回车键,系统会自动检测当前的本地主机名和IP地址。如果检测到本地主机名和IP地址都在,则可以使用“delet...
      99+
      2023-10-28
      文件夹 删除掉 服务器
    • 怎么使用Git删除merge操作
      今天小编给大家分享一下怎么使用Git删除merge操作的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、回顾Git merg...
      99+
      2023-07-05
    • PythonPandas删除列操作怎么实现
      在Pandas中,可以使用“drop() ”方法来删除DataFrame中的列:1、使用“import pandas as pd”导入Pandas模块;2、创建一个DataFrame;3、使用“drop()”方法删除指定列;4、可以传递一个...
      99+
      2023-12-19
      pythonpandas pythonpandas删除列
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作