袁庭新老師ES系列09節(jié)|使?kibana對類型及映射操作
前言
類型及映射是Elasticsearch中重要的兩個(gè)概念。本章節(jié)袁老師將帶領(lǐng)同學(xué)們來學(xué)習(xí)Elasticsearch中的類型和映射部分的內(nèi)容。先透露一下,在Elasticsearch中,類型(type)相當(dāng)于關(guān)系數(shù)據(jù)庫中的table概念;映射(mapping)相當(dāng)于數(shù)據(jù)庫中的schema,用來約束字段的類型。有些小伙伴此時(shí)可能會感到云里霧里,那我們就帶著疑問繼續(xù)去探討相關(guān)的內(nèi)容。
一. 創(chuàng)建字段映射
1.字段映射介紹
有了索引庫 ,等于有了數(shù)據(jù)庫中的Database。接下來就需要索引庫中的類型了,也就是數(shù)據(jù)庫中的表。創(chuàng)建數(shù)據(jù)庫表需要設(shè)置字段約束,索引庫也一樣,在創(chuàng)建索引庫的類型時(shí),需要知道這個(gè)類型下有哪些字段,每個(gè)字段有哪些約束信息,這就叫作字段映射(Mapping)。
注意:Elasticsearch7.x取消了索引type類型的設(shè)置,不允許指定類型,默認(rèn)為_doc,但字段仍然是有的,我們需要設(shè)置字段的約束信息,叫作字段映射(Mapping)。
字段的約束我們在學(xué)習(xí)Lucene中我們都見到過,包括到不限于:
字段的數(shù)據(jù)類型
是否要存儲
是否要索引
是否分詞
分詞器是什么
我們一起來看下創(chuàng)建的語法。
2.創(chuàng)建字段映射語法
2.1 創(chuàng)建字段映射語法
語法格式:請求方式依然是PUT。
類型名稱:就是前面講的type的概念,類似于數(shù)據(jù)庫中的表。
字段名:字段名稱由開發(fā)者自定義,每個(gè)字段名下可指定多個(gè)屬性。具體屬性見下表:

演示示例:
如果yx索引庫存在,響應(yīng)結(jié)果見下:
如果yx索引庫不存在,響應(yīng)結(jié)果見下:
注意:在進(jìn)行創(chuàng)建索引庫中的字段映射時(shí),需要先確保索引庫被創(chuàng)建,否則會拋index_not_found_exception異常。
上述案例中,就給“yx”這個(gè)索引庫添加了一個(gè)名為goods的類型,并且在類型中設(shè)置了3個(gè)字段:
title:商品標(biāo)題
images:商品圖片
price:商品價(jià)格
并且給這些字段設(shè)置了一些屬性,至于這些屬性對應(yīng)的含義,我們在后續(xù)會詳細(xì)介紹。
二. 查看映射關(guān)系
語法格式:
查看某個(gè)索引庫中的所有類型的映射。如果要查看某個(gè)類型映射,可以在路徑后面跟上類型名稱。即:
演示示例:
響應(yīng)結(jié)果:
三. 字段數(shù)據(jù)類型詳解
Elasticsearch中支持的數(shù)據(jù)類型非常豐富。具體查看以下鏈接的文檔介紹。
1.字段數(shù)據(jù)類型介紹
每個(gè)字段都有一個(gè)字段數(shù)據(jù)類型或字段類型。此類型指示字段包含的數(shù)據(jù)類型(如字符串或布爾值)及其預(yù)期用途。例如,可以將字符串索引到text字段和keyword字段。但是,text字段值將被分析用于全文搜索,而keyword字符串則保留原樣用于過濾和排序。
字段類型按族分組。同一族中的類型具有完全相同的搜索行為,但可能具有不同的空間使用或性能特征。
目前,有兩個(gè)類型族,keyword和text。其他類型族只有一個(gè)字段類型。例如,boolean類型族由一種字段類型組成:boolean。
2.字段數(shù)據(jù)類型分類
2.1 常用類型
Elasticsearch支持豐富的數(shù)據(jù)類型,見下表:

2.2 string類型
string類型取值見下:
text:使用文本數(shù)據(jù)類型的字段,它們會被分詞,文本字段不用于排序,很少用于聚合,如文章標(biāo)題、正文。
keyword:關(guān)鍵字?jǐn)?shù)據(jù)類型,用于索引結(jié)構(gòu)化內(nèi)容的字段,不會被分詞,必須完整匹配的內(nèi)容,如郵箱、身份證號等。支持聚合。
這兩種類型都是比較常用的,但有的時(shí)候,對于一個(gè)字符串字段,我們可能希望他兩種都支持,此時(shí),可以利用其多字段特性。
2.3 Numerical數(shù)值類型
數(shù)值類型介紹見下:
基本數(shù)據(jù)類型:long、interger、short、byte、double、?oat、half_?oat
?oat單精度32位
double雙精度64位
half_?oat半精度16位
浮點(diǎn)數(shù)的高精度類型scaled_?oat
帶有縮放因子的縮放類型浮點(diǎn)數(shù),依靠一個(gè) long數(shù)字類型通過一個(gè)固定的(double類型)縮放因數(shù)進(jìn)行縮放。
需要指定一個(gè)精度因子,比如10或100。Elasticsearch會把真實(shí)值乘以這個(gè)因子后存儲,取出時(shí)再還原。
2.4 Date日期類型
Elasticsearch可以將日期格式化為字符串存儲,但是建議我們存儲為毫秒值,存儲為long,節(jié)省空間。
2.5 Array數(shù)組類型
進(jìn)行匹配時(shí),任意一個(gè)元素滿足,都認(rèn)為滿足。
排序時(shí),如果升序則用數(shù)組中的最小值來排序,如果降序則用數(shù)組中的最大值來排序。
2.6 Object對象
JSON文檔本質(zhì)上是分層的。文檔包含內(nèi)部對象,內(nèi)部對象本身還包含內(nèi)部對象。
可以將上述的文檔可以改寫成以下形式。
2.7 ip地址
IPv4和IPv6地址。
創(chuàng)建一個(gè)my_ip_addr索引庫,并指定ip_addr字段的類型是ip。
向索引庫中添加一條數(shù)據(jù)。
查詢my_ip_addr索引庫中的數(shù)據(jù)。
2.8 數(shù)組
在Elasticsearch中,數(shù)組不需要專用的字段數(shù)據(jù)類型。默認(rèn)情況下,任何字段都可以包含零個(gè)或多個(gè)值,但是,數(shù)組中的所有值必須是相同的字段類型。
2.9 多領(lǐng)域
出于不同的目的,以不同的方式索引同一字段通常很有用。例如,一個(gè)string字段可以映射為一個(gè)text用于全文搜索的字段,也可以映射為一個(gè)keyword用于排序或聚合的字段?;蛘撸梢允褂脴?biāo)準(zhǔn)分析器(standard analyzer)、英語分析器(english analyzer)和法語分析器(french analyzer)對文本字段進(jìn)行索引。
這就是多領(lǐng)域的目的。fields大多數(shù)字段類型通過fields參數(shù)支持多字段。
3.index
index影響字段的索引情況。
true:字段會被索引,則可以用來進(jìn)行搜索過濾。默認(rèn)值就是true,只有當(dāng)某一個(gè)字段的index值設(shè)置為true時(shí),檢索ES才可以作為條件去檢索。
false:字段不會被索引,不能用來搜索。
index的默認(rèn)值就是true,也就是說你不進(jìn)行任何配置,所有字段都會被索引。
但是有些字段是我們不希望被索引的,比如商品的圖片信息(URL),就需要手動設(shè)置index為false。
4.store
是否將數(shù)據(jù)進(jìn)行額外存儲。
在學(xué)習(xí)Lucene時(shí),我們知道如果一個(gè)字段的store設(shè)置為false,那么在文檔列表中就不會有這個(gè)字段的值,用戶的搜索結(jié)果中不會顯示出來。
但是在Elasticsearch中,即便store設(shè)置為false,也可以搜索到結(jié)果。原因是Elasticsearch在創(chuàng)建文檔索引時(shí),會將文檔中的原始數(shù)據(jù)備份,保存到一個(gè)叫做_source的屬性中。而且我們可以通過過濾_source來選擇哪些要顯示,哪些不顯示。
而如果設(shè)置store為true,就會在_source以外額外存儲一份數(shù)據(jù)(多余),因此一般我們都會將store設(shè)置為false,事實(shí)上,store的默認(rèn)值就是false。
在某些情況下,這對store某個(gè)領(lǐng)域可能是有意義的。例如,如果您的文檔包含一個(gè)title、一個(gè)date和一個(gè)非常大的content字段,則可能只想檢索title和date而不必從一個(gè)大_source字段中提取這些字段:
5.boost
網(wǎng)站權(quán)重:網(wǎng)站權(quán)重是指搜索引擎給網(wǎng)站(包括網(wǎng)頁)賦予一定的權(quán)威值,對網(wǎng)站(含網(wǎng)頁)權(quán)威的評估評價(jià)。一 個(gè)網(wǎng)站權(quán)重越高,在搜索引擎所占的份量越大,在搜索引擎排名就越好。提高網(wǎng)站權(quán)重,不但利于網(wǎng)站(包括網(wǎng)頁)在搜索引擎的排名更靠前,還能提高整站的流量,提高網(wǎng)站信任度。所以提高網(wǎng)站的權(quán)重具有相當(dāng)重要的意義。 權(quán)重即網(wǎng)站在SEO中的重要性、權(quán)威性。英文Page Strength。
1.權(quán)重不等于排名。
2.權(quán)重對排名有著非常大的影響。
3.整站權(quán)重的提高有利于內(nèi)頁的排名。
新增數(shù)據(jù)時(shí),可以指定該數(shù)據(jù)的權(quán)重,權(quán)重越高,得分越高,排名越靠前。
title字段上的匹配項(xiàng)的權(quán)重是字段上的匹配項(xiàng)的權(quán)重的兩倍content ,默認(rèn)boost值為1.0 。 提升僅適用于Term查詢(不提升pre?x、range和模糊查詢)。
四. 一次創(chuàng)建索引庫和類型
傳統(tǒng)方式創(chuàng)建索引庫和設(shè)置類型分為兩個(gè)步驟。
第一步:創(chuàng)建索引庫。
第二步:對索引庫添加類型。
剛才的案例中我們是把創(chuàng)建索引庫和類型分開來做,其實(shí)也可以在創(chuàng)建索引庫的同時(shí),直接制定索引庫中的類型,基本語法見下:
演示示例:
響應(yīng)結(jié)果:
五. 結(jié)語
學(xué)完本章節(jié)是不是感覺收獲滿滿,關(guān)于Elasticsearch中的類型和映射相關(guān)的內(nèi)容咱們就分享到這里。趕緊來回顧下這一章節(jié)主要學(xué)習(xí)的內(nèi)容,首先我們給大家介紹了如何來創(chuàng)建字段映射,然后重點(diǎn)介紹了在Elasticsearch中幾種重要的字段數(shù)據(jù)類型,最后學(xué)習(xí)了如何創(chuàng)建索引和類型。內(nèi)容很多,還需要好好復(fù)習(xí)回顧哦。