ElasticSearch经典入门(九) ElasticSearch映射修改

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: ElasticSearch映射修改

前言

这篇文章的内容是ElasticSearch映射修改,写这篇文章是有水友公司里面遇到了映射修改问题,我这里做了一个整理,希望对你有所帮助。

映射修改问题

在ElasticSearch中一旦创建了映射想要进行修改是不被允许的。比如我这里有一个案例

#创建索引
PUT employee

#创建映射
POST employee/_doc/_mapping
{
   
   
  "properties":{
   
   
    "id":{
   
   
      "type":"integer"
    },
    "name":{
   
   
      "type":"keyword"
    }
  }
}

上面创建了索引employee ,同时为其创建映射,指定了id和name的类型为integer和keyword,下面尝试修改

POST employee/_doc/_mapping
{
   
   
  "properties":{
   
   
    "id":{
   
   
      "type":"long"
    },
    "name":{
   
   
      "type":"keyword"
    }
  }
}

当我尝试把id的类型由integer修改为long时,发生下面这个错误
image.png

说的是不能把integer修改为long,这个也很好理解,因为ES考虑到索引库已经存放了数据,如果你要修改字段类型会导致类型不兼容。

但是我们在开发中难免遇到字段类型没设定好而导致映射的修改。这里分为两种情况,一是添加字段做映射,二是修改已有字段的类型做映射。我们先说第一种。

添加映射

添加字段映射是比较方便的,因为添加不涉及到已有字段类型的修改,是可以直接添加语法如下

PUT employee/_doc/_mapping
{
  "properties":{
    "age":{
      "type":"integer"
    }
  }
}

这里使用PUT,为employee添加了一个 age,指定的类型为 integer。然后我们获取employee的映射 : GET employee/_doc/_mapping ,结果如下
image.png

修改映射

前面有说到,修改已有索引的映射是不被允许的,那么当我们遇到这样的需求应该怎么做呢?官方文档 是这样说明的

Updating existing field mappings
Other than where documented, existing field mappings cannot be updated. Changing the mapping would mean invalidating already indexed documents. Instead, you should create a new index with the correct mappings and reindex your data into that index. If you only wish to rename a field and not change its mappings, it may make sense to introduce an alias field

大概意思就是:现有的字段映射无法更新,更改映射将意味着使已有索引的文档无效。相反,您应该使用正确的映射创建一个新索引,并将数据重新索引到该索引中。简单理解就是让我们创建一个新的索引,做好映射,把数据重新写入到新的索引中。

第一步:创建一个新的索引和映射 , id的类型我做了修改,指定为 long

#创建映射
PUT employees

PUT employees/_doc/_mapping
{
  "properties":{
    "id":{
      "type":"long"
    },
    "name":{
      "type":"keyword"
    }
  }
}

第二步:数据的迁移,把老索引中的数据迁移到新的索引中,官方文档给出了语法:如下

POST _reindex
{
  "source": {
    "index": "employee"
  },
  "dest": {
    "index": "employees"
  }
}
  • source:是老索引
  • dest :是新的索引

如果是在7以前,老的索引和新的索引都有不同的type,那么要使用如下语法

POST _reindex
{
  "source": {
    "index": "",
    "type": ""
  },
  "dest": {
    "index": "",
    "type": ""
  }
}
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
存储 自然语言处理 数据库
使用Elasticsearch映射定义索引结构
使用Elasticsearch映射定义索引结构
193 0
|
安全 Linux 开发工具
Elasticsearch 搜索入门技术之一
Elasticsearch 搜索入门技术之一
341 1
|
JSON 自然语言处理 数据库
数据库-ElasticSearch入门(索引、文档、查询)
数据库-ElasticSearch入门(索引、文档、查询)
544 0
|
存储 Java API
Elasticsearch 7.8.0从入门到精通
这篇文章详细介绍了Elasticsearch 7.8.0的安装、核心概念(如正排索引和倒排索引)、RESTful风格、各种索引和文档操作、条件查询、聚合查询以及在Spring Boot中整合Elasticsearch的步骤和示例。
543 1
Elasticsearch 7.8.0从入门到精通
|
存储 关系型数据库 MySQL
浅谈Elasticsearch的入门与实践
本文主要围绕ES核心特性:分布式存储特性和分析检索能力,介绍了概念、原理与实践案例,希望让读者快速理解ES的核心特性与应用场景。
621 14
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
自然语言处理 关系型数据库 数据库
ElasticSearch 映射类型及数据类型区分
ElasticSearch 映射类型及数据类型区分
187 0
|
11月前
|
存储 JSON Java
ELK 圣经:Elasticsearch、Logstash、Kibana 从入门到精通
ELK是一套强大的日志管理和分析工具,广泛应用于日志监控、故障排查、业务分析等场景。本文档将详细介绍ELK的各个组件及其配置方法,帮助读者从零开始掌握ELK的使用。
|
JSON 搜索推荐 数据挖掘
ElasticSearch的简单介绍与使用【入门篇】
这篇文章是Elasticsearch的入门介绍,涵盖了Elasticsearch的基本概念、特点、安装方法以及如何进行基本的数据操作,包括索引文档、查询、更新、删除和使用bulk API进行批量操作。
ElasticSearch的简单介绍与使用【入门篇】
|
JSON 监控 Java
Elasticsearch 入门:搭建高性能搜索集群
【9月更文第2天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建。它能够处理大量的数据,提供快速的搜索响应。本教程将指导你如何从零开始搭建一个基本的 Elasticsearch 集群,并演示如何进行简单的索引和查询操作。
616 3