【Elasticsearch 7 探索之路】(六)初識(shí) Mapping

上一篇主要講解什么是 URL Search 和 Request Body Search 的語法买优。本篇對(duì) Mapping 的 Dynamic Mapping 以及手動(dòng)創(chuàng)建 Mapping 進(jìn)行講解。

1.什么是 Mapping

  • Mapping 類似數(shù)據(jù)庫(kù)中的 schema 的定義你踩,作用如下
    • 定義索引中的字段的名稱
    • 定義字段的數(shù)據(jù)類型孤钦,例如字符串,數(shù)值等
    • 字段,倒排索引的相關(guān)配置拣技,比如可以通過配置字段是否需要被索引(Analyzed or Not Analyzed,Analyzer)
  • Mapping 會(huì)把 Json 文檔映射成 Lucene 所需要的扁平格式
  • 一個(gè) Mapping 屬于一個(gè)索引的 Type,在 7.0 之后版本一個(gè)索引只有一個(gè) Type(_doc)
    • 一個(gè) Type 有一個(gè) Mapping 定義
    • 7.0 開始耍目,不需要在 Mapping 定義中指定 type 信息

2.常用字段的數(shù)據(jù)類型

  • 簡(jiǎn)單類型
    • Text / Keyword
    • Date
    • Integer / float/ double /long
    • Boolean
    • Ip
  • 復(fù)雜類型-對(duì)象和嵌套對(duì)象
    • 對(duì)象類型/嵌套類型
  • 特殊類型(針對(duì)地理信息的有特殊處理)
    • geo_point & geo_shape / percolator

3.1什么是 Dynamic Mapping

Dynamic Mapping 會(huì)自動(dòng)根據(jù)文檔信息膏斤,推算出字段的類型,使得你無需手動(dòng)創(chuàng)建 Mapping邪驮。在寫入文檔時(shí)候莫辨,而且如果索引不存在,會(huì)自動(dòng)創(chuàng)建索引。但是有時(shí)候推算也會(huì)錯(cuò)誤沮榜,例如地理位置信息盘榨。當(dāng)類型如果設(shè)置不對(duì)時(shí),會(huì)導(dǎo)致一些功能無法正常運(yùn)行蟆融,這點(diǎn)要特別注意草巡。

下面總結(jié) Json 類型到 Elasticsearch 類型的自動(dòng)識(shí)別

3.2.Json 類型和 Elasticsearch 類型轉(zhuǎn)換映射

Json 類型 Elasticsearch 類型
字符串 1.匹配日期格式,轉(zhuǎn)為 Date
2.數(shù)值轉(zhuǎn)為 float 或者 long,默認(rèn)關(guān)閉
3.轉(zhuǎn)為 Text型酥,并且增加 keyword
布爾值 boolean
浮點(diǎn)數(shù) float
整 數(shù) long
對(duì) 象 Object
數(shù) 組 由第一個(gè)非空數(shù)值的類型所決定
空 值 忽略
PUT mapping_test/_doc/1
{
  "name":"al",
  "age":15,
  "ageStr":"15",
  "birth":"2019-12-18",
  "arg":["aaa","1"],
  "flag":false
}

GET mapping_test/_mapping
image

3.3.能否更改 Mapping 字段類型

  • 新增字段情況山憨,Dynamic 設(shè)置為 true,帶有新字段的文檔寫入弥喉,Mapping 會(huì)更新萍歉。Dynamic 設(shè)置為 false,Mapping 不被更新档桃,新增字段不會(huì)被索引枪孩。Dynamic 設(shè)置為 Strict,帶有新字段的文檔寫入會(huì)直接報(bào)錯(cuò)藻肄。
  • 對(duì)已有字段并且存在數(shù)據(jù)情況蔑舞,不支持修改字段定義,因?yàn)?ES 通過 Lucene 生成倒排索引嘹屯,一旦生成就不許與修改
  • 如果實(shí)在需要修改可以通過 Reindex Api 重建索引
PUT mapping_test/_mapping
{
    "dynamic":"false"
}

PUT mapping_test/_doc/2
{
  "name":"al",
  "age":15,
  "ageStr":"15",
  "birth":"2019-12-18",
  "arg":["aaa","1"],
  "flag":false,
  "addCol":"test"
}

GET mapping_test/_search
{
  "query": {
    "match": {
      "addCol": "test"
    }
  }
}

當(dāng)前設(shè)置 "dynamic":"false"時(shí)攻询,新增的字段查詢不出結(jié)果。


image

4.1.手動(dòng)創(chuàng)建 Mapping

上面我們介紹了關(guān)于 Dynamic Mapping 功能州弟,現(xiàn)在但我們想要手動(dòng)創(chuàng)建一個(gè) Mapping 該如何創(chuàng)建钧栖。我先看一下下面代碼。

PUT student
{
    "mappings":{
      "properties": {
        "firstName":{
          "type":"text"
        },
        "lastName":{
          "type":"text"
        },
        "password":{
          "type":"text",
          "index":false
        }
    }
    }
}

PUT student/_doc/1
{
  "firstName":"AA",
  "lastName":"BB",
  "password":"abc"
}

POST student/_search
{
  "query": {
    "match_phrase": {
      "password": {
        "query": "abc"
      }
    }
  }
}
image

上面這個(gè)例子婆翔,就是一個(gè)比較簡(jiǎn)單手動(dòng)創(chuàng)建例子拯杠,我們通過為每一個(gè)字段創(chuàng)建類型,當(dāng)指定 index:false 時(shí)啃奴,ES 將不對(duì)這個(gè)字段建立倒排索引潭陪,從上圖結(jié)果就可以看出。

4.2.Index Options

ES 有四種不同級(jí)別的 Index Options 配置

  • docs 記錄 doc id
  • freqs 記錄 doc id 和 term 頻次
  • positions 記錄 doc id 和 term 頻次 和 term 位置
  • offsets 記錄 doc id 和 term 頻次 和 term 位置和字符偏移量

Text 類型默認(rèn) positions最蕾,其他默認(rèn)為 docs

4.3.copy_to

copy_to 是為瞞足一些特定搜素需求依溯,將多個(gè)字段 數(shù)值拷貝到目標(biāo)字段,目標(biāo)字段不會(huì)出現(xiàn)在 _source瘟则。在 ES7 中黎炉,copy_to 已經(jīng)替代 copy_to。例如下面這個(gè)例子醋拧,把 firsetName 和 lastName 合并一起搜素慷嗜。

PUT student_1
{
    "mappings":{
      "properties": {
        "firstName":{
          "type":"text",
           "copy_to": "fullName"
        },
        "lastName":{
          "type":"text",
           "copy_to": "fullName"
        },
        "password":{
          "type":"text",
          "index":false
        }
    }
    }
}

PUT student_1/_doc/1
{
  "firstName":"AA",
  "lastName":"BB",
  "password":"abc"
}

Get student_1/_search?q=fullName:(AA BB)
image

5.小結(jié)

本篇主要對(duì) Dynamic Mapping 以及手動(dòng)創(chuàng)建 Mapping 進(jìn)行講解宿百,Dynamic Mapping 有好處也有壞處,好處我們無需定義 Mapping洪添,壞處是推算的類型不一定正確,這點(diǎn)要留意雀费。如果手動(dòng)創(chuàng)建 Mapping 比較推薦先用 Dynamic Mapping 創(chuàng)建生成一個(gè)臨時(shí)索引干奢,查詢 Mapping 定義(標(biāo)題3.2 下面的結(jié)果圖)修改使用,這樣可以減少工作量和出錯(cuò)的概率盏袄。

系列文章
【Elasticsearch 7 探索之路】(五)搜索相關(guān) Search-API
【Elasticsearch 7 探索之路】(四)Analyzer 分析
【Elasticsearch 7 探索之路】(三)倒排索引
【Elasticsearch 7 探索之路】(二)文檔的 CRUD 和批量操作
【Elasticsearch 7 搜索之路】(一)什么是 Elasticsearch忿峻?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辕羽,隨后出現(xiàn)的幾起案子逛尚,更是在濱河造成了極大的恐慌,老刑警劉巖刁愿,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰寞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡铣口,警方通過查閱死者的電腦和手機(jī)滤钱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脑题,“玉大人件缸,你說我怎么就攤上這事∈逅欤” “怎么了他炊?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)已艰。 經(jīng)常有香客問我痊末,道長(zhǎng),這世上最難降的妖魔是什么哩掺? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任舌胶,我火速辦了婚禮,結(jié)果婚禮上疮丛,老公的妹妹穿的比我還像新娘幔嫂。我一直安慰自己,他們只是感情好誊薄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布履恩。 她就那樣靜靜地躺著,像睡著了一般呢蔫。 火紅的嫁衣襯著肌膚如雪切心。 梳的紋絲不亂的頭發(fā)上飒筑,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音绽昏,去河邊找鬼协屡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛全谤,可吹牛的內(nèi)容都是我干的肤晓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼认然,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼补憾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卷员,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤盈匾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后毕骡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體削饵,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年未巫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葵孤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡橱赠,死狀恐怖尤仍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狭姨,我是刑警寧澤宰啦,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站饼拍,受9級(jí)特大地震影響赡模,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜师抄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一漓柑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叨吮,春花似錦辆布、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涵叮,卻和暖如春惭蹂,著一層夾襖步出監(jiān)牢的瞬間伞插,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工盾碗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媚污,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓廷雅,卻偏偏與公主長(zhǎng)得像耗美,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榜轿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容