ES資料型別

2021-08-21 21:23:53 字數 4323 閱讀 2851

陣列型別:沒有明顯的字段型別設定,任何乙個欄位的值,都可以被新增0個到多個,要求,他們的型別必須一致,當型別一直含有多個值儲存到es中會自動轉化成陣列型別

對於陣列型別的資料,是乙個陣列元素做乙個資料單元,如果是分詞的話也只是會依乙個陣列元素作為詞源進行分詞。不會是所有的陣列元素整合到一起。在查詢的時候如果陣列裡面的元素有乙個能夠命中那麼將視為命中,被召回。

2.1 字段型別概述

一級分類 二級分類 具體型別

核心型別 字串型別 string,text,keyword

整數型別 integer,long,short,byte

浮點型別 double,float,half_float,scaled_float

邏輯型別 boolean

日期型別 date

範圍型別 range

二進位制型別 binary

復合型別 陣列型別 array

物件型別 object

巢狀型別 nested

地理型別 地理座標型別 geo_point

地理地圖 geo_shape

特殊型別 ip型別 ip

範圍型別 completion

令牌計數型別 token_count

附件型別 attachment

抽取型別 percolator

12.2 字串型別

(1)string

string型別在elasticsearch 舊版本中使用較多,從elasticsearch 5.x開始不再支援string,由text和keyword型別替代。

(2)text

當乙個欄位是要被全文搜尋的,比如email內容、產品描述,應該使用text型別。設定text型別以後,字段內容會被分析,在生成倒排索引以前,字串會被分析器分成乙個乙個詞項。text型別的字段不用於排序,很少用於聚合。

(3)keyword

keyword型別適用於索引結構化的字段,比如email位址、主機名、狀態碼和標籤。如果字段需要進行過濾(比如查詢已發布部落格中status屬性為published的文章)、排序、聚合。keyword型別的字段只能通過精確值搜尋到。

12.3 整數型別

型別 取值範圍

byte -128~127

short -32768~32767

integer -231~231-1

long -263~263-1

在滿足需求的情況下,盡可能選擇範圍小的資料型別。比如,某個欄位的取值最大值不會超過100,那麼選擇byte型別即可。迄今為止吉尼斯記錄的人類的年齡的最大值為134歲,對於年齡字段,short足矣。欄位的長度越短,索引和搜尋的效率越高。

12.4 浮點型別

型別 取值範圍

doule 64位雙精度ieee 754浮點型別

float 32位單精度ieee 754浮點型別

half_float 16位半精度ieee 754浮點型別

scaled_float 縮放型別的的浮點數

對於float、half_float和scaled_float,-0.0和+0.0是不同的值,使用term查詢查詢-0.0不會匹配+0.0,同樣range查詢中上邊界是-0.0不會匹配+0.0,下邊界是+0.0不會匹配-0.0。

其中scaled_float,比如**只需要精確到分,price為57.34的字段縮放因子為100,存起來就是5734

優先考慮使用帶縮放因子的scaled_float浮點型別。

12.5 date型別

我們人類使用的計時系統是相當複雜的:秒是基本單位, 60秒為1分鐘, 60分鐘為1小時, 24小時是一天……如果計算機也使用相同的方式來計時, 那顯然就要用多個變數來分別存放年月日時分秒, 不停的進行進製運算, 而且還要處理偶爾的閏年和閏秒以及協調不同的時區. 基於」追求簡單」的設計理念, unix在內部採用了一種最簡單的計時方式:

計算從unix誕生的utc時間2023年1月1日0時0分0秒起, 流逝的秒數.

utc時間2023年1月1日0時0分0秒就是unix時間0, utc時間2023年1月2日0時0分0秒就是unix時間86400.

這個計時系統被所有的unix和類unix系統繼承了下來, 而且影響了許多非unix系統.

1 2

3 日期型別表示格式可以是以下幾種:

(1)日期格式的字串,比如 「2018-01-13」 或 「2018-01-13 12:10:30」

(2)long型別的毫秒數( milliseconds-since-the-epoch,epoch就是指unix誕生的utc時間2023年1月1日0時0分0秒)

(3)integer的秒數(seconds-since-the-epoch)

elasticsearch 內部會將日期資料轉換為utc,並儲存為milliseconds-since-the-epoch的long型整數。

例子:日期格式資料

(1)建立索引

delete test

put test/my/1

put test/my/2

put test/my/3 1

2 3

4 5

6 7

8 9

10 11

12 (3)批量查詢

get test/my/_mget 1

2 3 4

},

},

} ]

} 1

2 3

4 5

6 7

8 9

10 11

12 13

14 15

16 17

18 19

20 21

22 23

24 25

26 27

28 29

30 31

32 33

34 12.6 boolean型別

邏輯型別(布林型別)可以接受true/false/」true」/」false」值

(1)先刪除已經存在的索引,再建立

delete test

put test/my/1

put test/my/2 1

2 3

4 5

6 7

8 9

(3)檢視文件

get test/my/_mget 1

2 3 4

},

} ]

} 1

2 3

4 5

6 7

8 9

10 11

12 13

14 15

16 17

18 19

20 21

22 23

24 12.7 binary型別

二進位製字段是指用base64來表示索引中儲存的二進位制資料,可用來儲存二進位制形式的資料,例如影象。預設情況下,該型別的字段只儲存不索引。二進位制型別只支援index_name屬性。

12.7 array型別

在elasticsearch中,沒有專門的陣列(array)資料型別,但是,在預設情況下,任意乙個欄位都可以包含0或多個值,這意味著每個字段預設都是陣列型別,只不過,陣列型別的各個元素值的資料型別必須相同。在elasticsearch中,陣列是開箱即用的(out of box),不需要進行任何配置,就可以直接使用。

在同乙個陣列中,陣列元素的資料型別是相同的,elasticsearch不支援元素為多個資料型別:[ 10, 「some string」 ],常用的陣列型別是:

(1)字元陣列: [ 「one」, 「two」 ]

(2)整數陣列: productid:[ 1, 2 ]

(3)物件(文件)陣列: 「user」:[ , ],elasticsearch內部把物件陣列展開為

12.8 object型別

json天生具有層級關係,文件會包含巢狀的物件

delete test

put test

put test/my/1 }

} 1

2 3

4 5

6 7

8 9

10 11

12 13

14 15

上面文件整體是乙個json,json中包含乙個employee,employee又包含乙個fullname。

delete test

get test/_search }

} 1

2 3

4 5

6 7

8 ,

「hits」:

} ] } }

es 資料型別

es6中,string型別已經被廢棄了,需要使用text keyword型別來代替。1 text型別 當乙個字段需要用於全文搜尋 會被分詞 比如產品名稱 產品描述資訊,就應該使用text型別。該型別欄位會通過分析器轉成terms list,然後存入索引。該型別欄位不用於排序 聚合操作。2 keywo...

ES6 Symbol資料型別

基本的資料型別 null undefined number boolean string symbol 引用資料型別 object let s1 symbol let s2 symbol console.log typeof s1 symbol console.log s1 s2 false1 sy...

ES6 Map資料型別

定義 map 物件儲存鍵值對。任何值 物件或者原始值 都可以作為乙個鍵或乙個值。語法 new map iterable 引數 iterable iterable 可以是乙個陣列或者其他 iterable 物件,其元素為鍵值對 兩個元素的陣列,例如 1,one 2,two 每個鍵值對都會新增到新的 m...