Elasticsearch 索引管理:使用别名来修改字段类型

这篇具有很好参考价值的文章主要介绍了Elasticsearch 索引管理:使用别名来修改字段类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 Elasticsearch 中,一个常见的问题是如何修改已存在的索引的字段类型。这是一个棘手的问题,因为 Elasticsearch 本身不允许直接修改字段类型。如果删除现有索引,重新建索引的话则会导致数据丢失。有一个方法是使用别名索引,当需要调整索引时可以先新建一个索引,把数据导入到新索引,之后将别名索引指向新索引。这些操作都是在es上完成,对于应用程序来说是无感知的。

以下是操作步骤:
假设有个索引product_statistic_spu,结构如下:

{
  "mappings" : {
    "properties" : {
      "date" : {
        "type" : "date"
      },
      "id" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },
      "product_discount_rate" : {
       "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },
      "spu_code" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      }
    }
  }
}

现在需要将product_discount_rate字段的类型改成scaled_float, 新的索引结构如下:

{
  "mappings" : {
    "properties" : {
      "date" : {
        "type" : "date"
      },
      "id" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },
      "product_discount_rate" : {
        "type" : "scaled_float",
        "scaling_factor" : 100.0
      },
      "spu_code" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      }
    }
  }
}

1. 创建新索引

创建一个新的索引,我们称之为 “product_statistic_spu_alias”,并设置我们需要的新字段类型。

PUT product_statistic_spu_alias
{
  "mappings" : {
    "properties" : {
      "date" : {
        "type" : "date"
      },
      "id" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },
      "product_discount_rate" : {
        "type" : "scaled_float",
        "scaling_factor" : 100.0
      },
      "spu_code" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      }
    }
  }
}

2. 复制数据到新索引

使用 _reindex API 将 “product_statistic_spu” 索引的数据复制到 “product_statistic_spu_alias” 索引。

POST /_reindex
{
  "source": {
    "index": "product_statistic_spu"
  },
  "dest": {
    "index": "product_statistic_spu_alias"
  }
}

3. 确认数据已经完全复制到新索引

通过查询新索引的文档数量来确认数据已经完全复制过去。

GET product_statistic_spu/_count
GET product_statistic_spu_alias/_count

这里注意下,选一个不怎么写es实例的时间来做,或者说在这期间不要写es,保证两个数据一致。

4. 删除旧索引

在确认所有数据都已成功复制到新索引后,删除旧的 “product_statistic_spu” 索引。

DELETE /product_statistic_spu

5. 为新索引创建别名

为 “product_statistic_spu_alias” 索引创建一个别名 “product_statistic_spu”。这样,应用程序可以继续使用原始的索引名称进行操作,而实际上访问的是新创建的索引。

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "product_statistic_spu_alias",
        "alias": "product_statistic_spu"
      }
    }
  ]
}

6. 后续更新

在后续的使用中,如果需要更新 “product_statistic_spu” 索引,只需重复步骤1和2,创建一个新的索引,例如 “product_statistic_spu_alias_0515”,然后调整索引别名,使其指向新索引。

POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "product_statistic_spu_alias",
        "alias": "product_statistic_spu"
      }
    },
    {
      "add": {
        "index": "product_statistic_spu_alias_0515",
        "alias": "product_statistic_spu"
      }
    }
  ]
}

通过以上的操作我们实现了用别名来管理索引,在后续的维护中会方便很多。文章来源地址https://www.toymoban.com/news/detail-771047.html

到了这里,关于Elasticsearch 索引管理:使用别名来修改字段类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch解决不能修改索引、字段问题解决方案

    问题1: 由于es索引不能删除,不能修改,在不影响原数据的情况下,并且生产服务不停机的情况下,怎么修改索引,并保留原索引内的数据? 基于kibanna的dev Tools执行参数,淘汰postman,kibanna会有提示 1、原来索引起别名job 2、重建索引,数据迁移,默认是同步执行大数据量太

    2024年02月12日
    浏览(45)
  • ElasticSearch第十七讲 ES索引别名的使用

    ES中可以为索引添加别名,一个别名可以指向到多个索引中,同时在添加别名时可以设置筛选条件,指向一个索引的部分数据,实现在关系数据库汇总的视图功能,这就是ES中别名的强大之处。别名是一个非常实用的功能,为我们使用索引提供了极大的灵活性,许多ES的API都支

    2024年02月13日
    浏览(43)
  • ElasticSearch第八讲 ES索引字段映射类型以及动态映射相关操作

    ES的映射:映射就是 Mapping,它用来定义一个文档以及文档所包含的字段该如何被存储和索引。所以,它其实有点类似于关系型数据库中表的定义。其中ES中映射可以分为动态映射和静态映射,静态映射就是提前创建好对应字段文档映射关系,如果插入的类型不对会出错,而动

    2024年02月10日
    浏览(47)
  • 用Elasticsearch做大规模数据的多字段、多类型索引检索

    本文同时发布在我的个人博客 之前尝试了用mysql做大规模数据的检索优化,可以看到单字段检索的情况下,是可以通过各种手段做到各种类型索引快速检索的,那是一种相对简单的场景。 但是实际应用往往会复杂一些 —— 各类索引(匹配、全文检索、时间范围)混合使

    2024年04月10日
    浏览(55)
  • 5.elasticsearch映射操作(创建|修改|删除)及字段类型

    1.本文介绍了 elasticsearch 映射的操作方式,包括映射创建,修改,删除; 2.映射定义: 映射是定义文档及其包含的字段如何存储和索引的过程 。 例如,使用映射来定义: ① 哪些字符串字段应该被作为全文检索字段; ② 哪些字段包含 数字,日期,及地理位置; ③ 日期格式

    2023年04月12日
    浏览(65)
  • (十)ElasticSearch高级使用【别名,重建索引,refresh操作,高亮查询,查询建议】

    在开发中,随着业务需求的迭代,较⽼的业务逻辑就要⾯临更新甚⾄是重构,⽽对于es来说,为了 适应新的业务逻辑,可能就要对原有的索引做⼀些修改,⽐如对某些字段做调整,甚⾄是重建索 引。⽽做这些操作的时候,可能会对业务造成影响,甚⾄是停机调整等问题。由此

    2024年02月02日
    浏览(73)
  • ElasticSearch创建后的索引如何修改数据类型

    一、前言 在 Elasticsearch 中,一旦创建索引,就不能更改现有字段的数据类型。如果您需要更改数据类型,则需要重新创建索引并使用新的数据类型。以下针对各种业务场景总结几种修改方法。 二、【方法一】删除重建 这种方式的使用场景为当前索引库数据量不大,而且可

    2024年02月13日
    浏览(53)
  • 类型转换与索引使用与字段缓存问题

    ** 1: 类型转换与索引使用** 假设你有一个MySQL表格 users ,其中有一个 age 列,数据类型是整数(INT),并且为该列创建了一个索引。然后你执行以下查询: 在这个查询中,你将整数值 \\\'25\\\' 用作字符串来匹配 age 列。MySQL 可能会自动进行类型转换,将字符串转换为整数,然后再

    2024年02月13日
    浏览(39)
  • Elasticsearch 字段别名 field-alias

    Elasticsearch 8.1 Kibana 8.1 MacOS 10.14.6 首先我们还是先了解一下, 什么是字段别名? 大家可能听说过 索引别名 ,通过索引的别名可以轻松的切换所需的数据来源与哪一个索引,那么什么是字段别名呢?所谓字段别名,就是索引mapping定义时的备用字段,通过字段别名可以替换搜索

    2023年04月18日
    浏览(74)
  • Spring Boot Elasticsearch7.6.2实现创建索引、删除索引、判断索引是否存在、获取/添加/删除/更新索引别名、单条/批量插入、单条/批量更新、删除数据、递归统计ES聚合的数据

    注意:我的版本是elasticsearch7.6.2、spring-boot-starter-data-elasticsearch-2.5.6 引入依赖 有时候你可能需要查询大批量的数据,建议加上下面配置文件

    2024年02月13日
    浏览(75)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包