ES索引修改mappings与重建reindex详解之修改字段类型

这篇具有很好参考价值的文章主要介绍了ES索引修改mappings与重建reindex详解之修改字段类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概要

elasticsearch一直在使用,这里总结一下mappings的修改方法,分为两种情况:

  1. 增加新的字段,这种很简单;
  2. 修改已有的字段类型,这种就比较麻烦了,需要reindex,对索引进行迁移重建。

一、创建索引

curl -XPUT 'http://127.0.0.1:9200/test?pretty' -H  'Content-Type: application/json' -d '{"settings":{},"mappings":{}}'
{
	"settings": {
		"index": {
			"number_of_shards": 2,
			"number_of_replicas": 3,
			"analysis": {
				"analyzer": {
					"char_analyzer": {
						"filter": ["lowercase"],
						"type": "custom",
						"tokenizer": "char_split"
					}
				},
				"tokenizer": {
					"char_split": {
						"token_chars": ["letter", "digit", "punctuation", "symbol"],
						"min_gram": "1",
						"type": "nGram",
						"max_gram": "1"
					}
				}
			}
		}
	},
	"mappings": {
		"doc": {
			"properties": {
				"id": {
					"type": "long"
				},
				"pd_name": {
					"type": "text",
					"fields": {
						"keyword": {
							"type": "keyword",
							"ignore_above": 256
						}
					},
					"analyzer": "char_analyzer"
				},
				"pd_uname": {
					"type": "text",
					"fields": {
						"keyword": {
							"type": "keyword",
							"ignore_above": 256
						}
					}
				},
				"product_id": {
					"type": "long"
				}
			}
		}
	}
}
1.1、获取mappings
curl -XGET 'http://127.0.0.1:9200/test/_mappings?pretty'
{
  "test" : {
    "mappings" : {
      "doc" : {
        "properties" : {
          "id" : {
            "type" : "long"
          },
          "pd_name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            },
            "analyzer" : "char_analyzer"
          },
          "pd_uname" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "product_id" : {
            "type" : "long"
          }
        }
      }
    }
  }
}

二、新增字段修改mappings

增加一个 new_stocks 字段,如下:

curl -XPUT 'http://127.0.0.1:9200/test/doc/_mapping?pretty' -H  'Content-Type: application/json' -d '{"properties":{"new_stocks":{"type":"nested","properties":{"value":{"type":"long"},"conversion":{"type":"long"}}}}}'
{
  "acknowledged" : true
}

再查一下:

curl -XGET 'http://127.0.0.1:9200/test/_mappings?pretty'                                                                                                          {
  "test" : {
    "mappings" : {
      "doc" : {
        "properties" : {
          "id" : {
            "type" : "long"
          },
          "new_stocks" : {
            "type" : "nested",
            "properties" : {
              "conversion" : {
                "type" : "long"
              },
              "value" : {
                "type" : "long"
              }
            }
          },
          "pd_name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            },
            "analyzer" : "char_analyzer"
          },
          "pd_uname" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "product_id" : {
            "type" : "long"
          }
        }
      }
    }
  }
}

可以看到new_stocks字段已经加上去了。

三、修改OR删除mappings已有字段

如果想把product_id字段类型由long改成text,并删除id字段呢?此时用第二章节的方案就不行了,需要借用reindex命令重做索引。

3.1、创建新索引,将要改字段加进去
curl -XPUT 'http://127.0.0.1:9200/new_test?pretty' -H  'Content-Type: application/json' -d '{"settings":{},"mappings":{}}'

{
	"settings": {
		"index": {
			"number_of_shards": 2,
			"number_of_replicas": 3,
			"analysis": {
				"analyzer": {
					"char_analyzer": {
						"filter": ["lowercase"],
						"type": "custom",
						"tokenizer": "char_split"
					}
				},
				"tokenizer": {
					"char_split": {
						"token_chars": ["letter", "digit", "punctuation", "symbol"],
						"min_gram": "1",
						"type": "nGram",
						"max_gram": "1"
					}
				}
			}
		}
	},
	"mappings": {
		"doc": {
			"properties": {
				"id": {
					"type": "long"
				},
				"pd_name": {
					"type": "text",
					"fields": {
						"keyword": {
							"type": "keyword",
							"ignore_above": 256
						}
					},
					"analyzer": "char_analyzer"
				},
				"pd_uname": {
					"type": "text",
					"fields": {
						"keyword": {
							"type": "keyword",
							"ignore_above": 256
						}
					}
				},
				"product_id": {
					"type": "text",
					"fields": {
						"keyword": {
							"type": "keyword",
							"ignore_above": 256
						}
					}
				}
			}
		}
	}
}
3.2、同步数据
curl -XPOST 'http://127.0.0.1:9200/_reindex?pretty' -H  'Content-Type: application/json' -d '{"source":{"index":"test"},"dest":{"index":"new_test"}}'

3.3、删除原索引并对新索引重命名
#删除
curl -XDELETE 'http://127.0.0.1:9200/test?pretty'
#设置别名
curl -XPOST 'http://127.0.0.1:9200/_aliases?pretty' -H  'Content-Type: application/json' -d '{"actions":[{"add":{"index":"new_test","alias":"test"}}]}'

3.4、同步数据的技巧
  1. 同步部分字段
#从源头过滤, _source 参数,只同步 id,pd_name两个字段
curl -XPOST 'http://127.0.0.1:9200/_reindex?pretty' -H  'Content-Type: application/json' -d '{"source":{"index":"test","_source":["id","pd_name"]},"dest":{"index":"new_test"}}'
#从目的地移除 脚本控制,移除id字段
curl -XPOST 'http://127.0.0.1:9200/_reindex?pretty' -H  'Content-Type: application/json' -d '{"source":{"index":"test"},"dest":{"index":"new_test"},"script":{"lang":"groovy","inline":"ctx._source.remove(\"id\");ctx._source.remove(\"pd_uname\")"}}'

  1. 提高同步速率
    调整参数size大小,默认1000每批
curl -XPOST 'http://127.0.0.1:9200/_reindex?pretty' -H  'Content-Type: application/json' -d '{"source":{"index":"test","size":5000},"dest":{"index":"new_test"}}'

四、参考文献

1]:官方文档
2]:ES索引重建reindex详解
3]:ES迁移效率文章来源地址https://www.toymoban.com/news/detail-584428.html

到了这里,关于ES索引修改mappings与重建reindex详解之修改字段类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • ElasticSearch修改索引字段类型

    线上功能报错,一看日志是往es中添加数据报错,错误日志如下: 说是数据中有个字段类型转换错误,一查es脚本工具,果然生产es索引中categoryId这个字段是integer类型,而实际是long类型。 es不能直接修改索引字段类型,需要删除调新建,具体方法如下 我这次遇到问题的es索引

    2023年04月08日
    浏览(38)
  • 【Elasticsearch学习笔记二】es的Mapping字段映射、Mapping字段常用类型、Mapping映射的创建、查看和更新、es数据迁移、ik分词器

    目录 1、Mapping字段映射概述 2、Mapping字段常用类型 3、映射中对时间类型详解 1)采取自动映射器来映射 2)手工映射提前指定日期类型 4、ES的keyword的属性ignore_above 5、Mapping映射的查看和创建 1)查看mapping信息:GET 索引名/_mapping 2)创建映射:PUT /索引名 3) 查看所有索引映

    2024年01月20日
    浏览(60)
  • Elasticsearch 索引管理:使用别名来修改字段类型

    在 Elasticsearch 中,一个常见的问题是如何修改已存在的索引的字段类型。这是一个棘手的问题,因为 Elasticsearch 本身不允许直接修改字段类型。如果删除现有索引,重新建索引的话则会导致数据丢失。有一个方法是使用别名索引,当需要调整索引时可以先新建一个索引,把数

    2024年02月03日
    浏览(42)
  • es如何修改字段类型

    演示:如下是一个包含date字段的索引ttteset-000001,接下来我们将其字段类型改为text类型

    2024年02月11日
    浏览(50)
  • ES修改字段类型(elastic)

    有个需求是将es的一个date类型的字段改为string类型,经查阅资料发现es不支持直接修改字段类型,只能将原索引结构复制出来,然后单独修改某个字段的类型后,再去新建一个索引将这个结构填充进去,填充完复制原索引数据到新索引,进而使用新的索引(也可以删掉老的索

    2024年02月06日
    浏览(49)
  • ES修改字段的数据类型

    原索引 : ads_assets_index_list_test_df 中 index_value 字段数据类型为 float, 无法使用sort进行排序,现需要改成 keyword 。 步骤一:创建过渡索引 重新创建一个索引 ads_assets_index_list_test00_df, index_value 字段数据类型为 keyword 步骤二:迁移数据 将旧索引的数据导入新索引 查询可以看到

    2024年02月06日
    浏览(39)
  • ES 索引重命名--Reindex(一)

    ES reindex脚本流程,下图为整体流程: 步骤(1):每次写入把之前的索引删除再重新创建索引,然后判断索引是否创建成功,由于创建成功返回结果是json,因此用Json Input插件去解析json获得字段,然后用Switch/case插件判断是否成功。 步骤(2):re_index 步骤三:索引别名 删除

    2024年02月11日
    浏览(38)
  • ES索引数据迁移 _reindex

    集群内部索引迁移,从一个索引迁移数据到另一个索引里 新索引与就索引结构保持一致 通过就索引_mapping _setting 获取配置和结构信息 然后创建新索引 需要注意 添加如下配置 设置number_of_replicas为0防止我们迁移文档的同时又发送到副本节点,影响性能 设置refresh_interval为-1是

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

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

    2024年02月10日
    浏览(45)
  • kibana中ES修改某个字段类型问题

     近日,发现同步数据到es的时候,有个新建的索引动态适配了mapping,而往往这种会有字段类型不是我们想要的,比如我这就有个tid字段,此字段要在聚合操作中使用,而此时的tid被识别成text类型了,而text不支持聚合,所以要更改字段类型为long或者keyword,注意es 不支持直接

    2024年02月08日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包