ES常用的數據類型可分為3大類
- 核⼼數據類型
- 復雜數據類型
- 專⽤數據類型
核心數據類型
(1)字符串
- text ⽤於全⽂索引,搜索時會自動使用分詞器進⾏分詞再匹配
- keyword 不分詞,搜索時需要匹配完整的值
(2)數值型
- 整型: byte,short,integer,long
- 浮點型: float, half_float, scaled_float,double
(3)日期類型
- date
json沒有date類型,插入|更新文檔|字段時怎么表示date類型?
#mapping,將字段類型設置為date "type" : "date" #插入|更新此字段的值時,有3種表示方式 #使用固定格式的字符串 "2020-04-18"、"2020/04/18 09:00:00" #值使用長整型的時間戳,1970-01-01 00:00:00,s 1610350870 #值使用長整型的時間戳,ms 1641886870000
(4)范圍型
integer_range, long_range, float_range,double_range,date_range
比如招聘要求年齡在[20, 40]上,mapping:
age_limit :{ "type" : "integer_range" }
插入|更新文檔|字段時,值寫成json對象的形式:
"age_limit" : { "gte" : 20, "lte" : 40 }
gt是大於,lt是小於,e是equals等於。
按此字段搜索時,值寫常量:
"term" : { "age_limit" : 30 }
age_limit的區間包含了此值的文檔都算是匹配。
(5)布爾
- boolean #true、false
(6)⼆進制
- binary 會把值當做經過 base64 編碼的字符串,默認不存儲,且不可搜索
復雜數據類型
(1)對象
- object
#定義mapping "user" : { "type":"object" } #插入|更新字段的值,值寫成json對象的形式 "user" : { "name":"chy", "age":12 } #搜索時,字段名使用點號連接 "match":{ "user.name":"chy" }
一個對象中可以嵌套對象。
(2)數組
#ES沒有專門的數組類型,定義mapping,寫成元素的類型 "arr" : { "type":"integer" } #插入|更新字段的值。元素可以是各種類型,但元素的類型要相同 "arr" : [1,3,4]
專用數據類型
- ip
#定義mapping "ip_address" : { "type":"ip" } #插入|更新字段的值,值寫成字符串形式 "ip" : "192.168.1.1" #搜索 "match":{ "ip_address":"192.168.1.1" } #ip在192.168.0.0 ~ 192.168.255.255上的文檔都匹配 "match":{ "ip_address":"192.168.0.0/16" }