ElasticSearch創(chuàng)建后索引修改數(shù)據(jù)類型方法步驟
一、前言
在 Elasticsearch 中,一旦創(chuàng)建索引,就不能更改現(xiàn)有字段的數(shù)據(jù)類型。如果您需要更改數(shù)據(jù)類型,則需要重新創(chuàng)建索引并使用新的數(shù)據(jù)類型。以下針對(duì)各種業(yè)務(wù)場景總結(jié)幾種修改方法。
二、【方法一】刪除重建
這種方式的使用場景為當(dāng)前索引庫數(shù)據(jù)量不大,而且可以及時(shí)同步數(shù)據(jù)到該索引庫。一般用在實(shí)時(shí)采集數(shù)據(jù)到ES中,刪除舊的索引后,重新采集數(shù)據(jù)即可。
delete /my_index
三、【方法二】使用備份數(shù)據(jù)重建
當(dāng)你數(shù)據(jù)量也不算太大,_reindex的執(zhí)行速度還算快的,幾十萬的數(shù)據(jù)量大概在十分鐘以內(nèi),百萬級(jí)的大概在半個(gè)小時(shí)內(nèi)就可以完全備份,可以先使用備份庫,具體思路如下:
1、獲取源索引的數(shù)據(jù)(mapping) 并 創(chuàng)建臨時(shí)索引:my_index_temp,
2、備份數(shù)據(jù)到臨時(shí)索引:my_index_temp
3、刪除原索引: my_index,
4、重新創(chuàng)建正確數(shù)據(jù)類型索引:my_index
5、再把臨時(shí)索引:my_index_temp的數(shù)據(jù)備份到新創(chuàng)建索引 my_index。
操作步驟如下:
1、獲取原索引
//獲取源索引的mapping數(shù)據(jù)
GET my_index/_mapping
//返回示例如下
{"my_index": {
"mappings": {
"cdp_doc": {
"properties": {
"whyBuy": {
"type": "keyword"
},
"zipcode": {
"type": "keyword"
}
}
}
}
}2、創(chuàng)建一個(gè)臨時(shí)索引,并備份原索引的數(shù)據(jù)
//代碼如下(示例):
//# 創(chuàng)建Mapping
PUT my_index_temp
{
"mappings": {
"cdp_doc": {
"properties": {
"whyBuy": {
"type": "keyword"
},
"zipcode": {
"type": "keyword"
}
}
}
}
}3、備份原數(shù)據(jù)
// 同步數(shù)據(jù)值臨時(shí)索引
POST _reindex?refresh&wait_for_completion=false
{
"conflicts": "proceed",
"source": {
"index": "my_index"
},
"dest": {
"index": "my_index_temp",
"op_type": "create"
}
}
//查詢確認(rèn)數(shù)據(jù)是否復(fù)制過去
GET my_index_temp/_search
{
"query": {
"term": {
}
}
}4、刪除原索引及數(shù)據(jù)
//刪除索引及數(shù)據(jù) delete my_index
5、重新創(chuàng)建正確的索引(注意是修改后的索引)
同步驟2
6、遷移舊數(shù)據(jù)回新索引
同步驟3
7、刪除臨時(shí)索引
同步驟4
四、【方法三】使用嵌套增加屬性
這種方法針對(duì)索引字段類型text,添加keyword類型操作。
首先區(qū)分一下text類型和keyword類型:
text類型:會(huì)進(jìn)行分詞、分詞后建立索引、支持模糊查詢、不支持準(zhǔn)確查詢、不支持聚合查詢。
keyword類型:不會(huì)分詞、直接建立索引、不支持模糊查詢、支持準(zhǔn)確查詢、支持聚合查詢。
操作步驟如下:
PUT my_index/_mapping
{
"properties": {
"my_fields": {
"type": "text",
"analyzer": "ik_smart",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
// 結(jié)果:
{
"acknowledged" : true
}注意這里有個(gè)問題,如果直接執(zhí)行完后,數(shù)據(jù)不會(huì)及時(shí)更新,所以執(zhí)行到這里如果去聚合,舊數(shù)據(jù)是一樣沒有聚合到的,還需要執(zhí)行以下語句更新數(shù)據(jù)
POST my_index/_update_by_query # 后臺(tái)執(zhí)行 POST my_index/_update_by_query?wait_for_completion=false
修改完成之后,新的數(shù)據(jù)就會(huì)按照新的mapping來走了,可以通過my_fields.keyword的形式進(jìn)行完全匹配和聚合搜索。
五、【方法四】使用數(shù)據(jù)從原索引導(dǎo)入新索引中
假設(shè)您要將一個(gè)名為 my_index 的索引中的整數(shù)類型更改為字符串類型。以下示例代碼將源索引中的數(shù)據(jù)復(fù)制到新索引中,并使用新的字段映射規(guī)則:
POST _reindex
{
"source": {
"index": "my_index"
},
"dest": {
"index": "my_new_index"
},
"script": {
"source": "ctx._source.my_integer_field = ctx._source.my_integer_field.toString()",
"lang": "painless"
},
"mappings": {
"properties": {
"my_integer_field": {
"type": "text"
}
}
}
}在上面的代碼中,我們使用腳本將原始索引中的整數(shù)類型字段 my_integer_field 轉(zhuǎn)換為字符串類型,并將其保存到新的索引中。同時(shí),在新索引中定義了一個(gè)新的數(shù)據(jù)類型 text,用于存儲(chǔ)該字段。
切換到新的索引
最后,一旦新索引準(zhǔn)備就緒并包含原始索引的所有數(shù)據(jù),就可以切換應(yīng)用程序以使用新的索引。
需要注意的是,重新創(chuàng)建索引可能會(huì)導(dǎo)致數(shù)據(jù)丟失或不可用性。在執(zhí)行此操作之前,請(qǐng)務(wù)必備份和驗(yàn)證數(shù)據(jù)。
總結(jié)
到此這篇關(guān)于ElasticSearch創(chuàng)建后索引修改數(shù)據(jù)類型的文章就介紹到這了,更多相關(guān)ES創(chuàng)建索引修改數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)對(duì)兩張表進(jìn)行數(shù)據(jù)同步
文章描述了在Java中使用SQL Server的MERGE語句實(shí)現(xiàn)兩張表的同步操作,適用于主表查詢、附表增刪改的場景,MERGE語句可以同時(shí)執(zhí)行插入和更新操作,適用于Oracle和SQL Server,但不適用于MySQL和PostgreSQL,可通過自定義注解實(shí)現(xiàn)接口調(diào)用后的同步操作2026-05-05
基于Java的MathML轉(zhuǎn)圖片的方法(示例代碼)
最近接到一個(gè)新需求mathML轉(zhuǎn)圖片怎么實(shí)現(xiàn)呢?剛開始還真是蒙圈了,不知道怎么實(shí)現(xiàn),今天小編記錄一種基于Java的MathML轉(zhuǎn)圖片的方法,感興趣的朋友一起看看吧2021-06-06
Java進(jìn)程CPU使用率過高排查步驟詳細(xì)講解
這篇文章主要介紹了Java進(jìn)程CPU使用率過高排查的相關(guān)資料,針對(duì)Java進(jìn)程CPU使用率高的問題,我們可以遵循以下步驟進(jìn)行排查和優(yōu)化,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-06-06
JavaEE的進(jìn)程,線程和創(chuàng)建線程的5種方式詳解
這篇文章主要為大家詳細(xì)介紹了JavaEE的進(jìn)程,線程和創(chuàng)建線程的5種方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
JSON各種轉(zhuǎn)換問題(json轉(zhuǎn)List,json轉(zhuǎn)對(duì)象等)
這篇文章主要介紹了JSON各種轉(zhuǎn)換問題(json轉(zhuǎn)List,json轉(zhuǎn)對(duì)象等),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03

