精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Elasticsearch Mapping類型修改

數據庫 其他數據庫
除了支持的mapping parameters外,您不能更改現有字段的映射或字段類型。更改現有字段可能會使已編制索引的數據無效。如果您需要更改字段的映射,請使用正確的映射創建一個新索引并將您的數據重新索引reindex到該索引中。

背景

通常數據庫進行分庫分表后,目前比較常規的作法,是通過將數據異構到Elasticsearch來提供分頁列表查詢服務;在創建Elasticsearch索引時,基本都是會參考目前的業務需求、關系數據庫中的類型以及對數據的相關規劃來定義相關字段mapping的類型.在Elasticsearch的mapping中的列(或則叫屬性),有幾個比較重要的參數(更多參數參考官方文檔)

  • 列類型:type
  • 指定了該列的數據類型,常用的有text, keyword, date, long, double,boolean以及 object和nested,不同的類型也有對應的不同查詢方式,創建之后是不能修改的;
  • 是否可索引:index
  • 該index選項控制字段值是否被索引。它接受true or false,并且默認為true. 未索引的字段不可查詢,當然也不能做為排序字段。

但是在實際的開發過程中,又會有需求對現有的mapping的type進行修改(類似對MySQL數據表的字段進行DDL操作)的訴求。比如商品上的價格price字段,按原來的業務分析,只需要提供數據返回即可,在創建索引時類型定義了keyword了,并且index設置成了false,這時我們需要根據價格的范圍查詢或則進行排序操作,就希望對mapping進行調整,將類型修改成數字類型,索引也需要加上;今天針對Elasticsearch的Mapping類型進行修改,討論幾個可行的方案

方案1:運用reindex

遇到問題第一時間,我們應該是查詢官方文檔是否有相關的操作說明,在官方文檔中,確實還能找到對已有mapping更新的相關api put-mapping,通過這個文檔,很快可以找到文檔中對修改已有mapping的列的方式(參考官方文檔),同時也提到的通過 reindex的方式來修改已有類型的方式;

除了支持的mapping parameters外,您不能更改現有字段的映射或字段類型。更改現有字段可能會使已編制索引的數據無效。如果您需要更改字段的映射,請使用正確的映射創建一個新索引并將您的數據重新索引reindex到該索引中。

如原來索引的mapping如下

PUT /users
{
  "mappings" : {
    "properties": {
      "user_id": {
        "type": "long"
      }
    }
  }
}

//加一了兩條數據
POST /users/_doc?refresh=wait_for
{
    "user_id" : 12345
}

POST /users/_doc?refresh=wait_for
{
    "user_id" : 12346
}

這時想修改user_id的類型為keyword,我們直接是修改不了的。

//嘗試直接修改type,行不通,會報錯
PUT /users/_mapping
{
    "properties": {
        "user_id": {
            "type": "keyword"
        }
    }
}

//報錯信息
{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "mapper [user_id] of different type, current_type [long], merged_type [keyword]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "mapper [user_id] of different type, current_type [long], merged_type [keyword]"
  },
  "status": 400
}

按官方文檔說的reindex重新索引可按以下步驟操作

操作步驟

第一步:創建新的索引new_users將user_id的類型定義成keyword

PUT /new_users
{
  "mappings" : {
    "properties": {
      "user_id": {
        "type": "keyword"
      }
    }
  }
}

第二步:將原user索引標記為只讀

控制我們的應用系統,數據停寫不再向老索引中寫數據,并且最好對老索引進行只讀操作設置,保證在reindex的過程中,不要生產新數據,導致新老索數據不一致;

//設置索引為讀寫的
PUT /users/_settings
{
  "settings": {
    "index.blocks.write": true
  }
}

第三步:將原user索引中的數據遷移到new_users中

POST /_reindex
{
  "source": {
    "index": "users"
  },
  "dest": {
    "index": "new_users"
  }
}

reindex還有很多的參數可以配置,包括從遠程的一個集群遷移數據都是可以的,詳細可參考:Reindex API

如果新的索引的mapping的定義與原索引的定義有差異的,會按新索引定義的 dynamic 規則進行數據的遷移,具體的,可以參考: dynamic

該dynamic設置控制是否可以動態添加新字段。它接受三種設置:

說明

true

新檢測到的字段被添加到映射中。(默認); 新增的數據類型的規則,可以參考:dynamic-mapping

false

忽略新檢測到的字段。這些字段不會被編入索引,因此將無法搜索,但仍會出現在_source返回的命中字段中。這些字段不會添加到映射中,必須明確添加新字段。

strict

如果檢測到新字段,則會拋出異常并拒絕文檔。必須將新字段顯式添加到映射中。

同時將原user索引標記為可讀寫

//設置索引為可讀寫
PUT /users/_settings
{
  "settings": {
    "index.blocks.write": false
  }
}

第四步:切換到使用新的mapping

  1. 可以將應用系統中的配置改成新索引
  2. 也可以通過索引的別名的方式為新索引增加原來老索引的別名來操作,為索引增加別名參考文檔:Add index alias API,在增加別名前,需要刪除原來的老索引;
//為索引增加別名 基本格式
PUT /<index>/_alias/<alias>
POST /<index>/_alias/<alias>

//為new_users索引增加別名users
PUT /new_users/_alias/users

//沒有刪除老索引前,是增加不了別名的,需要先刪除老別名
{
  "error": {
    "root_cause": [
      {
        "type": "invalid_alias_name_exception",
        "reason": "Invalid alias name [users], an index exists with the same name as the alias",
        "index_uuid": "8Rbq_32BTHC4CoO_CqWdXA",
        "index": "users"
      }
    ],
    "type": "invalid_alias_name_exception",
    "reason": "Invalid alias name [users], an index exists with the same name as the alias",
    "index_uuid": "8Rbq_32BTHC4CoO_CqWdXA",
    "index": "users"
  },
  "status": 400
}

方案優劣分析

【優點】操作簡單,官方方案

該方案,不需要對原索引做操作,在線即可進行,并且操作步驟也簡單;也是官方文檔提供的方案。

【缺點】數據量大遷移耗時長

當數據最大時,這個數據遷移會比較耗時

結論

當數據量小時,并且希望mapping比較規整好看,該方案是比較推薦的。當數據量大時,可能該方案在數據遷移過程中會比較耗時,需要評估是否可行;

方案2:運用multi-fields

為不同的目的以不同的方式索引同一個字段通常很有用。這就是multi-fields的目的。例如,一個string 字段可以映射為text用于全文搜索的字段,也可以映射keyword為用于排序或聚合的字段;在這個方案中,應用的是mapping參數fields來對同一個列,定義多種數據類型;詳細[【官方文檔】multi-fields] (https://www.elastic.co/guide/en/elasticsearch/reference/7.5/multi-fields.html)

操作步驟

第一步:為列增加fields屬性

還是以上面的users這個索引為例,我們還是想將user_id的類型定義成 keyword;

PUT /users/_mapping
{
    "properties":{
        "user_id":{
            "type":"long",
            "fields":{
                "raw":{
                    "type":"keyword"
                }
            }
        }
    }
}

操作完成后,在users的 user_id列下,就會多出一個raw的子屬性;在我們正常寫數據user_id時,會自動生成這兩個索引,一個是long類型的user_id,以及keyword類型的user_id.raw(注意這里有個點,跟子對象訪問方式一樣);在put mapping時,type參數必需給,并且需要跟原來的類型一致,fields中新定義的子屬性可以多個;

【可選】第二步:歷史數據更新

針對歷史數據需要處理,可以借助_update_by_query 來更新數據,只需要將原來的索引再寫一次,即可將新加的字段寫入數據。

POST /users/_update_by_query 

{
   "query":{
       "exists":{
           "field":"user_id"
       }
   },
   "script":{
       "source":"ctx._source.user_id=ctx._source.user_id ",
       "lang":"painless"
   }
}

// query 部分為需要更新數據過濾條件,可根據業務規則寫
// script 更數據的邏輯,這個基本可以不改

方案優劣分析

【優點】不影響原索引,同一列可以定義多種類型

通過這方式不會影響原來的索引數據,可以不用修改現在的應用程序的讀寫方式,對應用程序一切按原來邏輯執行,對應用方無感知,非常優化。只需要有使用新類型的場景使用即可,可以說影響是最小的;同時只是做了一個定義,執行速度是非常快的,對Elasticsearch服務基本不會有太大影響;并且對于同一個列可以定義多個類型,比如商品名稱,在多國多語言環境下可以根據不同語言定義多個列,對應使用不同的分詞器;

【缺點】老數據不會自動創建子索引,多出額外的存儲

老數據不會自動創建索引,因為需要多出新的索引來,會增加額外的存儲;

結論

1、需要對多一列創建多個索引類型時,是一個非常推薦的方案;2、對于新索引,只有新業務使用,對老數據沒有訴求的,也非常推薦該方案;

方案3:運用copy_to

copy_to是將多個字段的值,合并到一個字段中,便于搜索。但是也可以實現一個字段存在多個類型的需求。詳細參考【官方文檔】copy_to

操作步驟

還是用上面的users這個索引為例,為user_id創建一個copy列: user_id_raw 類型定義成 keyword

PUT /users/_mapping
{
    "properties":{
        "user_id_raw":{
          "type":"keyword",
          "copy_to":"user_id"
        }
    }
}

這個方案與方案2:multi-fields 基本是一樣的,只是創建列的方式不同,優缺點都一樣;

參考資料

  • [1] 【官方文檔】Mapping parameters
  • [2] 【官方文檔】Mapping Field datatypes
  • [3] [【官方文檔】multi-fields] (https://www.elastic.co/guide/en/elasticsearch/reference/7.5/multi-fields.html)
  • [4] Elasticsearch Rename Index
  • [5] elasticSearch7.x—mapping中的fields屬性||copy_to配置(同一個字段兩種類型)
  • [6] 《Elasticsearch:權威指南》Mapping -- Mapping parameters -- fields(multi-fields)

作者:京東零售 周德東

來源:京東云開發者社區 轉載請注明來源

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-11-13 22:27:53

Mapping數據庫

2009-09-24 10:07:21

Hibernate M

2023-12-12 17:41:05

2010-04-29 12:05:21

Oracle使用SQL

2025-10-29 02:11:00

架構索引優化

2009-07-16 15:02:39

Windows CE平臺類型

2010-04-13 15:23:03

Oracle 9i s

2009-07-16 14:52:00

修改Windows C平臺類型

2010-05-07 15:39:27

Oracle修改字段類

2010-04-30 16:09:13

Oracle修改字段類

2022-03-01 17:16:16

數倉建模ID Mapping

2020-09-17 08:28:08

內存映射反向

2017-05-04 10:33:25

Elasticsearelasticsear安裝

2012-01-04 16:21:11

2009-07-07 17:34:34

Servlet聲明和m

2009-06-03 14:06:44

ibmdwXML

2009-09-22 13:25:54

Hibernate M

2025-05-19 00:00:55

2018-04-03 10:28:53

AmazonElasticsearAWS

2024-03-07 11:03:21

ElasticseaES索引
點贊
收藏

51CTO技術棧公眾號

写真福利精品福利在线观看| 蜜桃免费在线| 欧美日韩亚洲国产精品| 亚洲国产天堂网精品网站| 国产妇女馒头高清泬20p多| 天天干天天爽天天操| 久久精品综合| 欧美激情影音先锋| 国产精品天天干| 亚洲视频国产| 欧美三级乱人伦电影| 妞干网视频在线观看| 成年人视频网站在线| 成人午夜激情视频| 国产一区二区丝袜高跟鞋图片| 青青青在线免费观看| 一个色免费成人影院| 日韩欧美黄色影院| 香港日本韩国三级网站| 黄色18在线观看| 亚洲另类中文字| 欧洲视频一区二区三区| 国产91免费在线观看| 老司机精品视频导航| 青草青草久热精品视频在线网站 | 自拍偷自拍亚洲精品播放| 精品一区二区三区日本| 一级全黄裸体免费视频| 丝袜美腿亚洲综合| 久久久久久久久久婷婷| 99久久婷婷国产综合| av影片在线一区| 日韩精品中文字| 亚洲成a人片在线www| 91麻豆精品| 欧美视频自拍偷拍| 北条麻妃在线一区| 性欧美freesex顶级少妇| 夜夜嗨av一区二区三区| 久久视频免费在线| 欧美性天天影视| 国产精品人成在线观看免费 | 成人精品视频久久久久| 中国一级片黄色一级片黄| 国产精品一级| 欧美一级高清免费| 欧美特黄aaaaaa| 国产日韩亚洲| 欧美亚洲另类激情另类| 五月婷婷亚洲综合| 亚洲免费一区二区| 国产91色在线播放| 成人a v视频| 日本sm残虐另类| 国产精品久久久久免费a∨大胸| 无码视频在线观看| 奇米精品一区二区三区四区| 国产精品久久久久久久7电影| 日本中文字幕在线| 亚洲三级影院| 日本中文字幕久久看| 最新中文字幕一区| 青草国产精品久久久久久| 国产精选久久久久久| 国产男男gay网站| 国产福利一区二区三区在线视频| 91免费版黄色| 日本精品久久久久| 久久亚洲影视婷婷| 亚洲黄色一区二区三区| 好操啊在线观看免费视频| 亚洲欧洲综合另类| 国产免费黄色一级片| 性欧美18xxxhd| 精品视频999| 午夜影院免费观看视频| 草草视频在线一区二区| 亚洲精选中文字幕| 熟女av一区二区| 狠狠88综合久久久久综合网| 97在线免费观看视频| 国产免费a视频| 青青草91视频| 国产精品一区免费观看| 黄色的视频在线免费观看| 中文字幕一区二区三区在线播放| 97在线免费视频观看| 涩涩在线视频| 欧美精品色综合| 国产日韩视频一区| 欧美综合久久| 久久久久久久久久国产精品| 中文字幕免费观看| 国产精品99久久久久久久vr | 国产精品人成电影| 亚洲国产一二三区| 日本一区二区视频在线| www成人免费| 主播大秀视频在线观看一区二区| 日韩片之四级片| 91精彩刺激对白露脸偷拍| 亚洲天堂免费| 国产精品18久久久久久首页狼| 国产99久一区二区三区a片| 91网站在线观看视频| 国产四区在线观看| 88xx成人免费观看视频库| 日韩女优毛片在线| 日本高清黄色片| 一区二区国产精品| 91久久国产自产拍夜夜嗨| 国产免费a∨片在线观看不卡| 亚洲国产综合视频在线观看| 女同激情久久av久久| 精品一区免费| 久久久欧美一区二区| 97精品久久人人爽人人爽| 久久香蕉国产线看观看99| 97中文字幕在线| 国产精品高潮久久| 亚洲欧美www| 日韩成人在线免费视频| 国产一区二区三区免费观看| 亚洲欧美日韩不卡一区二区三区| 在线能看的av网址| 精品国产第一区二区三区观看体验| 亚洲色图27p| 全国精品久久少妇| 人偷久久久久久久偷女厕| 97天天综合网| 精品福利一区二区三区免费视频| 欧美做爰爽爽爽爽爽爽| 美女www一区二区| 日韩欧美亚洲日产国产| 快播电影网址老女人久久| 亚洲精品中文字幕av| 在线观看中文字幕视频| av一本久道久久综合久久鬼色| 欧美一二三不卡| 精品国产不卡一区二区| 久久精品亚洲热| 97超碰人人模人人人爽人人爱| 中文字幕av一区二区三区| 99精品视频在线看| 最新国产一区| 青草成人免费视频| 激情综合闲人网| 一道本成人在线| 亚洲久久久久久久| 水野朝阳av一区二区三区| 欧美一区二视频在线免费观看| 范冰冰一级做a爰片久久毛片| 日韩国产中文字幕| 无码人妻丰满熟妇区五十路| 国产亚洲精品aa午夜观看| 美女黄色片视频| 欧美国产小视频| 91精品中国老女人| 欧美6一10sex性hd| 亚洲精品电影久久久| 黄色在线免费观看| 中文字幕成人网| 亚洲精品在线网址| 影音先锋中文字幕一区二区| 久久99精品久久久久久秒播放器| 日韩pacopacomama| 自拍亚洲一区欧美另类| 国产精品无码白浆高潮| 亚洲一本大道在线| 国产网站无遮挡| 日韩av一区二区三区四区| 在线视频不卡一区二区三区| 日日夜夜精品视频| 国产91精品青草社区| 1024视频在线| 精品少妇一区二区三区视频免付费 | 久久久久久久久久久久av| 熟妇人妻一区二区三区四区 | 人妻中文字幕一区| 色综合天天综合在线视频| 9.1片黄在线观看| 国产成人精品三级麻豆| 91精品91久久久中77777老牛 | 日本阿v视频在线观看| 色狠狠久久av综合| 国产日韩在线精品av| a毛片不卡免费看片| 影音先锋日韩有码| 成人激情四射网| 在线视频综合导航| 久草中文在线视频| 国产女人18毛片水真多成人如厕| 日本特黄在线观看| 久久精品电影| 小泽玛利亚av在线| 国产成人精品三级高清久久91| 国产精品自拍偷拍| 在线看片福利| 欧美高清在线观看| eeuss影院www在线观看| 精品国产乱码久久久久久图片 | 精品88久久久久88久久久| 五月婷婷六月婷婷| 亚洲成人精品影院| 欧美特黄一级片| 久久久91精品国产一区二区精品| 久久综合桃花网| 人禽交欧美网站| 国产最新免费视频| 欧美日韩一区二区高清| 一本久久a久久精品vr综合 | 久久精品一区二区三区四区| 原创真实夫妻啪啪av| 奇米一区二区三区av| 国产精品无码一区二区在线| 亚洲色图二区| 中文字幕免费在线不卡| 国产最新精品| 久久国产精品亚洲va麻豆| 欧美视频二区欧美影视| 国产精品久久久久久久久久新婚| 理论不卡电影大全神| 欧美成人剧情片在线观看| 91精彩视频在线观看| 亚洲日韩欧美视频| 手机看片一区二区| 亚洲成人999| 一起草av在线| 黑人巨大精品欧美一区二区三区 | 91国偷自产一区二区三区成为亚洲经典 | 黄色一级片一级片| 久久久www成人免费无遮挡大片| 97人妻精品一区二区三区免费| 国产一区二区三区美女| 天堂在线中文在线| 久久国产精品一区二区| 日本成人黄色网| 日韩精品91亚洲二区在线观看| 黄色动漫网站入口| 亚洲一区二区免费看| 美女日批免费视频| 亚洲欧美日韩一区在线观看| 亚洲 欧美 日韩 国产综合 在线| 国产主播一区| 女人被男人躁得好爽免费视频| 91成人精品| 黄黄视频在线观看| 欧美一区国产在线| 9l视频自拍9l视频自拍| 天天操夜夜操国产精品| 中国人体摄影一区二区三区| 日韩一区欧美| 中文字幕一区二区三区四区五区| 99精品一区| 天堂v在线视频| 1024精品久久久久久久久| 艳母动漫在线观看| 精品av久久久久电影| 国产av人人夜夜澡人人爽麻豆| 国产一区日韩一区| 日日碰狠狠添天天爽超碰97| 免费一级欧美片在线播放| 无码无遮挡又大又爽又黄的视频| 久久久国产亚洲精品| 福利在线一区二区三区| 国内精品免费**视频| gogo亚洲国模私拍人体| 不卡一区在线观看| 久久精品国产亚洲av麻豆| 国产欧美一二三区| 免费看一级大片| 亚洲国产日韩综合久久精品| 日本天堂网在线| 欧美日韩小视频| 午夜精品久久久久久久99热黄桃 | 日本大香伊一区二区三区| 中文字幕第三页| 日韩写真欧美这视频| 色呦呦中文字幕| 原创国产精品91| av在线app| 欧美一级片一区| 久久亚洲精品中文字幕| 91成人免费视频| 亚洲深夜福利在线观看| 亚洲激情一区二区三区| 国产精品豆花视频| 国产又猛又黄的视频| 国产高清无密码一区二区三区| 小毛片在线观看| 国产精品女同一区二区三区| 久久久久久久九九九九| 欧美性猛交xxxx免费看久久久| 91精品视频免费在线观看 | 91嫩草免费看| 蜜乳av综合| 青青草免费在线视频观看| 午夜亚洲伦理| 亚洲精品久久久久久| 久久综合一区二区| 福利所第一导航| 在线视频你懂得一区| 亚洲精品一区二区三区不卡| 中文字幕视频在线免费欧美日韩综合在线看 | 91成人网在线| 欧美 中文字幕| 丝袜情趣国产精品| 一二三四视频在线中文| 91久久伊人青青碰碰婷婷| 红桃成人av在线播放| 97视频久久久| 国产一区二区在线视频| 永久免费av无码网站性色av| 亚洲国产cao| 97人人爽人人爽人人爽 | 国产精品剧情| 国产91免费看片| 欧美变态挠脚心| 91网站在线观看免费| 精品一区中文字幕| 性欧美精品男男| 日韩欧美国产中文字幕| 免费国产黄色片| 欧美激情精品久久久久久黑人| 日韩欧国产精品一区综合无码| 欧美日韩精品免费看| 尹人成人综合网| 日本女人黄色片| 亚洲欧洲日产国产综合网| 老熟妇一区二区三区啪啪| 亚洲欧美在线免费观看| 国产传媒在线观看| 国产精品视频免费观看| 欧美精品偷拍| 日本人dh亚洲人ⅹxx| 亚洲色图欧洲色图婷婷| 国产精品久久久久久69| 日韩亚洲在线观看| 精品176极品一区| 亚洲精品视频一二三| 青青草一区二区三区| 精品无码国产污污污免费网站 | 久久久伊人日本| aiss精品大尺度系列| www.欧美黄色| 成人性生交大片免费| 国产精品theporn动漫| 精品国精品自拍自在线| 少女频道在线观看高清| 动漫精品视频| 激情欧美丁香| 国产视频久久久久久| 欧美网站在线观看| 日本精品专区| 国产成人精品久久二区二区91 | 亚洲精品一区二区三区中文字幕 | 99热这里只有精品4| 欧美日韩国产片| 黄网页免费在线观看| 91免费在线观看网站| 99精品福利视频| 久久久久久久久久久久久久久| 欧美亚洲综合色| 黄色成人影院| 动漫3d精品一区二区三区| 一本色道久久综合一区 | 99久久99热这里只有精品| 青青草久久伊人| 一区二区欧美精品| 污视频软件在线观看| 538国产精品视频一区二区| 欧美男gay| 91丝袜超薄交口足| 午夜精品久久久久久| 毛片在线播放网址| 成人a免费视频| 极品少妇一区二区三区| 美女爆乳18禁www久久久久久| 欧美日韩高清不卡| 97在线超碰| 亚洲精品一区二区三区av| 国产乱码字幕精品高清av| 日韩特黄一级片| 夜夜嗨av一区二区三区免费区| 爱情电影网av一区二区| 黄色成人在线看| 国产精品久久久久影院色老大| 朝桐光av在线一区二区三区| 欧美在线免费视频| 婷婷综合网站| 中文字幕av观看| 欧美日韩国产bt| 咪咪网在线视频| 中文字幕av导航| 2020国产精品| 亚洲av无码片一区二区三区| 欧美制服第一页| 欧美激情1区2区3区| 精品成人无码一区二区三区| 精品成人a区在线观看|