第07篇-Elasticsearch中的映射方式—簡潔版教程

我的Elasticsearch系列文章,逐漸更新中八拱,歡迎關(guān)注

0A.關(guān)于Elasticsearch及實例應(yīng)用

00.Solr與ElasticSearch對比

01.ElasticSearch能做什么阵赠?

02.Elastic Stack功能介紹

03.如何安裝與設(shè)置Elasticsearch API

04.如果通過elasticsearch的head插件建立索引_CRUD操作

05.Elasticsearch多個實例和head plugin使用介紹

06.當Elasticsearch進行文檔索引時,它是怎樣工作的肌稻?

07.Elasticsearch中的映射方式—簡潔版教程

08.Elasticsearch中的分析和分析器應(yīng)用方式

另外對于入門小白清蚀,我強烈推薦這篇Elasticsearch手把手搭建指南給你,新手碰到的坑爹谭,這里都已經(jīng)寫了答案轧铁。

介紹

在這個簡短的博客中,我將解釋Elasticsearch中的映射以及一些常見的有用最佳實踐旦棉。在本系列博客后面的Elasticsearch中學習分析/分析器時齿风,對映射有一個很好的了解將很方便。

映射

映射不過是Elasticsearch中文檔的架構(gòu)绑洛。正如我之前在階段01的博客之一中提到的那樣最易,Elasticsearch的架構(gòu)較少地技。這意味著舔涎,與其他數(shù)據(jù)庫(例如MongoDb或MySql)不同倍试,在將文檔索引到Elasticsearch之前,無需預(yù)定義文檔的架構(gòu)绑蔫。那么這是如何工作的呢运沦?簡而言之,Elasticsearch具有檢測文檔字段類型并生成模式并將其應(yīng)用于整個索引的內(nèi)置功能配深。當然携添,這里有一些事情要注意,但是我們稍后會在本博客中再次討論篓叶。首先讓我們看看在索引示例文檔時映射是如何存在的烈掠。

步驟1

創(chuàng)建沒有任何文檔的索引。

curl -XPUT localhost:9200/testindex-0202

對于上面的命令缸托,我們將得到以下響應(yīng):

{“acknowledged”: true,”shards_acknowledged”: true,”index”: ”testindex-0202"}

現(xiàn)在左敌,讓我們通過使用如下所示的“獲取映射” API來查看是否對其應(yīng)用了任何映射:

curl -XGET localhost:9200/testindex-0202/_mapping

上面的命令將導(dǎo)致以下響應(yīng):

{“testindex-0202”: {“mappings”: {}}}

從響應(yīng)中可以看到,“映射”部分為空俐镐,這意味著在此階段沒有應(yīng)用任何映射矫限。

第2步

現(xiàn)在將文檔索引到創(chuàng)建的索引,如下所示:

curl -XPUT localhost:9200/testindex-0202/testtype/1 — d ‘{“name”: ”ArunPMohan”,”age”: 31,”married”: true}’

如您在上面的文檔中看到的,我有三個字段叼风,字段的類型是字符串(對于“名稱”字段)幸斥,整數(shù)(對于“年齡”字段)和布爾值(對于“已婚”字段)。當我們鍵入此命令時咬扇,它不會導(dǎo)致任何錯誤,這僅表示Elasticsearch已自動檢測到字段類型廊勃。上面的用于為文檔建立索引的命令從Elasticsearch產(chǎn)生以下輸出:

{“_index”: ”testindex-0202",”_type”:”testtype”,”_id”:”1",”_version”: 1,”result”: ”created”,”_shards”: {“total”: 2,”successful”: 1,”failed”: 0},”created”: true}

現(xiàn)在懈贺,在創(chuàng)建文檔之后,我們可以使用“ GET mapping” API來查看映射更改坡垫。因此梭灿,應(yīng)用以下命令:

curl -XGET localhost:9200/testindex-0202/_mapping

響應(yīng)如下所示:

{“testindex-0202”: {“mappings”: {“testtype”: {“properties”: {“age”: {“type”: “l(fā)ong”},“married”: {“type”: “boolean”},“name”: {“type”: “text”,“fields”: {“keyword”: {“type”: “keyword”,“ignore_above”: 256}}}}}}}}

在上述回復(fù)中,請注意“映射”部分冰悠。這里堡妒,映射下的第一個對象是“ testtype”「茸浚“ testtype”指示索引的類型皮迟。在“測試類型”下方,我們有“屬性”對象桑寨,該對象保存字段及其類型的列表伏尼。您可以看到“年齡”字段的類型為“長”,“已婚”字段的類型為“布爾”尉尾,“名稱”字段的類型為“文本”爆阶。“文本”類型表示字段為“字符串”類型沙咏。在名稱字段下辨图,我們還有另一個部分稱為“字段”。在以后的博客中肢藐,我們將看到更多關(guān)于“字段”部分的信息故河,現(xiàn)在,它默認包含字符串/文本字段就足夠了吆豹。

關(guān)于Mappings的認識

讓我們看一下一些重要的事情忧勿,這些事情將有助于我們更多地了解映射。

1.更新映射瞻讽。

在Elasticsearch中鸳吸,會有多種類型,每種類型都有自己的映射速勇。一旦為一個類型下的字段數(shù)生成了映射晌砾,就不能修改它。就是說烦磁,如果一個文檔包含10個字段养匈,則會生成10個映射哼勇,而我們以后將無法對其進行修改。如果我們要修改它呕乎,我們需要刪除索引积担,然后手動應(yīng)用修改后的映射,然后為數(shù)據(jù)重新索引猬仁。

這里要注意的另一重要事情是帝璧,如果我們嘗試修改現(xiàn)有映射,則上述情況是正確的湿刽,但是對于新字段的烁,我們能夠更新映射。也就是說诈闺,如果我們在文檔之間添加第11個字段渴庆,則映射將相應(yīng)地自動更新。為了使事情更加清楚雅镊,讓我們將新文檔索引到“?testindex-0202”襟雷。在新文檔的此處,除了“姓名”仁烹,“年齡”和“已婚”字段外嗤军,我們還包括一個稱為“國家”的新字段。讓我們像下面這樣做:

curl -XPUT localhost:9200/testindex-0202/testtype/2 -d ‘{“name”: ”AlexJohn”,”age”: 32,”married”: true,”country”: ”Italy”}’

現(xiàn)在像我們之前一樣操作GET映射API晃危。在結(jié)果中叙赚,您可以看到還有一個名為“國家”的字段。

2.常見錯誤

處理映射時僚饭,最常見的錯誤之一是更改字段的現(xiàn)有類型震叮。讓我們自己看看這個錯誤,并加深了解鳍鸵。

testindex-0202

到目前為止苇瓣,在索引“?”中,我們已經(jīng)索引了2個文檔偿乖。兩個文檔的“年齡”字段具有相同的類型击罪,且類型為“長”。現(xiàn)在贪薪,讓我們嘗試為文檔編制索引媳禁,如下所示:

curl -XPUT localhost:9200/testindex-0202/testtype/3 -d ‘{“name”: ”LexaMathew”,”age”: ”twenty”,”married”: false,”country”: ”Italy”}’

請注意,這里的年齡以字符串類型給出画切,表示它是一個字符串字段竣稽。上述要求的回應(yīng)如下:

{“error”: {“root_cause”: [{“type”: ”mapper_parsing_exception”,”reason”: ”failedtoparse[age]”}],”type”: ”mapper_parsing_exception”,”reason”: ”failedtoparse[age]”,”caused_by”: {“type”: ”number_format_exception”,”reason”: ”Forinputstring: \”twenty\””}},”status”: 400}

在以上響應(yīng)中,我們可以

mapper_parsing_exception

在“年齡”字段中看到錯誤“?”。這表明此處的期望字段是另一種類型毫别,而不是字符串娃弓。在這種情況下,請使用適當?shù)念愋蜑槲臋n重新編制索引或檢查數(shù)據(jù)岛宦,以查看是否有任何數(shù)據(jù)修改需要進行并相應(yīng)地更改數(shù)據(jù)格式/映射台丛。

3.應(yīng)用自定義映射

到目前為止,我們已經(jīng)看到了映射的自動生成砾肺,即映射僅由elasticsearch生成⊥烀梗現(xiàn)在,最常見的用例是應(yīng)用我們自己的映射债沮。這可以通過在Elasticsearch中使用PUT映射API來完成,如下所示:

首先創(chuàng)建一個名稱為“?testindex-0202a”?的索引

curl -XPUT localhost:9200/testindex-0202a

現(xiàn)在本鸣,使用如下所示的PUT映射API:

curl -XPUT localhost:9200/testindex-0202a/_mapping/testtype -d ‘{“properties”: {“name”: {“type”: ”text”}}}’

這將創(chuàng)建一個以“名稱”作為字符串/文本字段的映射∫唏茫現(xiàn)在,索引為“?testindex-0202a”和類型為“?testtype”的任何文檔都應(yīng)具有“文本”類型的“名稱”字段荣德。

4.應(yīng)用映射的最佳實踐

實際上闷煤,發(fā)生的事情是字段的數(shù)據(jù)類型可能在不同的時間點發(fā)生變化。因此涮瞻,需要兩次迭代才能確定文檔字段的結(jié)構(gòu)/類型鲤拿。因此,我們可能需要不斷更改索引的數(shù)據(jù)類型/結(jié)構(gòu)或映射署咽。通常建議的做法是創(chuàng)建一個Shell腳本近顷,該腳本將首先刪除現(xiàn)有索引,然后將映射應(yīng)用于該索引宁否。這種做法的優(yōu)點是窒升,刪除現(xiàn)有索引然后通過創(chuàng)建新索引來修改映射將非常容易,從而為我們節(jié)省了大量時間慕匠。

結(jié)論

在此博客中饱须,我們介紹了Elasticsearch映射的基礎(chǔ)知識,例如Elasticsearch映射的應(yīng)用台谊,一些最佳實踐以及如何將自定義映射應(yīng)用于Elasticsearch索引蓉媳。在接下來的博客中,我們將詳細介紹Elasticsearch分析和分析器锅铅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酪呻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盐须,更是在濱河造成了極大的恐慌号杠,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姨蟋,居然都是意外死亡屉凯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門眼溶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悠砚,“玉大人,你說我怎么就攤上這事堂飞」嗑桑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵绰筛,是天一觀的道長枢泰。 經(jīng)常有香客問我,道長铝噩,這世上最難降的妖魔是什么衡蚂? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮骏庸,結(jié)果婚禮上毛甲,老公的妹妹穿的比我還像新娘。我一直安慰自己具被,他們只是感情好玻募,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著一姿,像睡著了一般七咧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叮叹,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天坑雅,我揣著相機與錄音,去河邊找鬼衬横。 笑死裹粤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蜂林。 我是一名探鬼主播遥诉,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼噪叙!你這毒婦竟也來了矮锈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤睁蕾,失蹤者是張志新(化名)和其女友劉穎苞笨,沒想到半個月后债朵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡瀑凝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年序芦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粤咪。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡谚中,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寥枝,到底是詐尸還是另有隱情宪塔,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布囊拜,位于F島的核電站某筐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冠跷。R本人自食惡果不足惜南誊,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔽莱。 院中可真熱鬧弟疆,春花似錦戚长、人聲如沸盗冷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仪糖。三九已至,卻和暖如春迫肖,著一層夾襖步出監(jiān)牢的瞬間锅劝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工蟆湖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留故爵,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓隅津,卻偏偏與公主長得像诬垂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伦仍,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344