ElasticSearch創(chuàng)建后索引修改數(shù)據(jù)類(lèi)型方法步驟
一、前言
在 Elasticsearch 中,一旦創(chuàng)建索引,就不能更改現(xiàn)有字段的數(shù)據(jù)類(lèi)型。如果您需要更改數(shù)據(jù)類(lèi)型,則需要重新創(chuàng)建索引并使用新的數(shù)據(jù)類(lèi)型。以下針對(duì)各種業(yè)務(wù)場(chǎng)景總結(jié)幾種修改方法。
二、【方法一】刪除重建
這種方式的使用場(chǎng)景為當(dāng)前索引庫(kù)數(shù)據(jù)量不大,而且可以及時(shí)同步數(shù)據(jù)到該索引庫(kù)。一般用在實(shí)時(shí)采集數(shù)據(jù)到ES中,刪除舊的索引后,重新采集數(shù)據(jù)即可。
delete /my_index
三、【方法二】使用備份數(shù)據(jù)重建
當(dāng)你數(shù)據(jù)量也不算太大,_reindex的執(zhí)行速度還算快的,幾十萬(wàn)的數(shù)據(jù)量大概在十分鐘以?xún)?nèi),百萬(wàn)級(jí)的大概在半個(gè)小時(shí)內(nèi)就可以完全備份,可以先使用備份庫(kù),具體思路如下:
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ù)類(lèi)型索引: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" } } //查詢(xún)確認(rèn)數(shù)據(jù)是否復(fù)制過(guò)去 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ì)索引字段類(lèi)型text,添加keyword類(lèi)型操作。
首先區(qū)分一下text類(lèi)型和keyword類(lèi)型:
text類(lèi)型:會(huì)進(jìn)行分詞、分詞后建立索引、支持模糊查詢(xún)、不支持準(zhǔn)確查詢(xún)、不支持聚合查詢(xún)。
keyword類(lèi)型:不會(huì)分詞、直接建立索引、不支持模糊查詢(xún)、支持準(zhǔn)確查詢(xún)、支持聚合查詢(xún)。
操作步驟如下:
PUT my_index/_mapping { "properties": { "my_fields": { "type": "text", "analyzer": "ik_smart", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } // 結(jié)果: { "acknowledged" : true }
注意這里有個(gè)問(wèn)題,如果直接執(zhí)行完后,數(shù)據(jù)不會(huì)及時(shí)更新,所以執(zhí)行到這里如果去聚合,舊數(shù)據(jù)是一樣沒(méi)有聚合到的,還需要執(zhí)行以下語(yǔ)句更新數(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來(lái)走了,可以通過(guò)my_fields.keyword的形式進(jìn)行完全匹配和聚合搜索。
五、【方法四】使用數(shù)據(jù)從原索引導(dǎo)入新索引中
假設(shè)您要將一個(gè)名為 my_index
的索引中的整數(shù)類(lèi)型更改為字符串類(lèi)型。以下示例代碼將源索引中的數(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ù)類(lèi)型字段 my_integer_field
轉(zhuǎn)換為字符串類(lèi)型,并將其保存到新的索引中。同時(shí),在新索引中定義了一個(gè)新的數(shù)據(jù)類(lèi)型 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ù)類(lèi)型的文章就介紹到這了,更多相關(guān)ES創(chuàng)建索引修改數(shù)據(jù)類(lèi)型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mall整合SpringTask實(shí)現(xiàn)定時(shí)任務(wù)的方法示例
這篇文章主要介紹了mall整合SpringTask實(shí)現(xiàn)定時(shí)任務(wù)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Java大批量導(dǎo)出Excel數(shù)據(jù)的優(yōu)化過(guò)程
幾十萬(wàn)上百萬(wàn)行的數(shù)據(jù)是很常見(jiàn)的。本文主要介紹了Java大批量導(dǎo)出Excel數(shù)據(jù)的優(yōu)化過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08舉例講解Java設(shè)計(jì)模式中的對(duì)象池模式編程
這篇文章主要介紹了Java設(shè)計(jì)模式中的對(duì)象池模式編程示例分享,對(duì)象池模式經(jīng)常在多線(xiàn)程開(kāi)發(fā)時(shí)被用到,需要的朋友可以參考下2016-02-02IDEA如何自動(dòng)生成serialVersionUID的設(shè)置
這篇文章主要介紹了IDEA如何自動(dòng)生成 serialVersionUID 的設(shè)置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java使用@Autowired注解獲取對(duì)象為null的幾種情況及解決方法
這篇文章主要給大家介紹了使用@Autowired注解獲取對(duì)象為null的幾種情況以及?解決方法,文中有詳細(xì)的代碼示例講解,具有一定的參考價(jià)值,需要的朋友可以參考下2023-09-09Java使用wait和notify實(shí)現(xiàn)線(xiàn)程之間的通信
Java 線(xiàn)程通信是將多個(gè)獨(dú)立的線(xiàn)程個(gè)體進(jìn)行關(guān)聯(lián)處理,使得線(xiàn)程與線(xiàn)程之間能進(jìn)行相互通信,下面這篇文章主要給大家介紹了關(guān)于Java使用wait和notify實(shí)現(xiàn)線(xiàn)程之間通信的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04java?zip文件解壓后無(wú)法刪除原zip文件問(wèn)題
這篇文章主要介紹了java?zip文件解壓后無(wú)法刪除原zip文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06