ElasticSearch7.4的數據類型,Mapping Type, 指定索引Document的Mapping Type
基礎數據類型:(ELasticsearch 5.X之後的字段類型不再支持string,由text或keyword取代)
一、字符串
1.1 文本類型 text
當一個字段需要用於全文搜索(會被分詞), 比如產品名稱、產品描述信息, 就應該使用text類型.
text的內容會被分詞, 可以設置是否需要存儲: "index": "true|false".
text類型的字段不能用於排序, 也很少用於聚合.
1.2 關鍵字類型 keyword
當一個字段需要按照精確值進行過濾、排序、聚合等操作時, 就應該使用keyword類型.
keyword的內容不會被分詞, 可以設置是否需要存儲: "index": "true|false".
二、數字類型:
byte 有符號的8位整數, 範圍: [-128 ~ 127]
short 有符號的16位整數, 範圍: [-32768 ~ 32767]
integer 有符號的32位整數, 範圍: [$-2^{31}$ ~ $2^{31}$-1]
long 有符號的32位整數, 範圍: [$-2^{63}$ ~ $2^{63}$-1]
float 32位單精度浮點數
double 64位雙精度浮點數
half_float 16位半精度IEEE 754浮點類型
scaled_float 縮放類型的的浮點數, 比如price字段只需精確到分, 57.34縮放因子爲100, 存儲結果爲5734
儘可能選擇範圍小的數據類型, 字段的長度越短, 索引和搜索的效率越高;
優先考慮使用帶縮放因子的浮點類型.
三、日期類型 - date
JSON沒有日期數據類型, 所以在ES中, 日期可以是:
包含格式化日期的字符串, "2018-10-01", 或"2018/10/01 12:10:30".
代表時間毫秒數的長整型數字.
代表時間秒數的整數.
如果時區未指定, 日期將被轉換爲UTC格式, 但存儲的卻是長整型的毫秒值.
可以自定義日期格式, 若未指定, 則使用默認格式: strict_date_optional_time||epoch_millis
四、布爾類型
真值: true, "true", "on", "yes", "1"...
假值: false, "false", "off", "no", "0", ""(空字符串), 0.0, 0
五、二進制類型
二進制類型是Base64編碼字符串的二進制值, 不以默認的方式存儲, 且不能被搜索. 有2個設置項:
(1) doc_values: 該字段是否需要存儲到磁盤上, 方便以後用來排序、聚合或腳本查詢. 接受true和false(默認);
(2) store: 該字段的值是否要和_source分開存儲、檢索, 意思是除了_source中, 是否要單獨再存儲一份. 接受true或false(默認).
六、範圍類型:
range類型支持以下幾種:
類型 範圍
integer_range $-2^{31}$ ~ $2^{31}-1$
long_range $-2^{63}$ ~ $2^{63}-1$
float_range 32位單精度浮點型
double_range 64位雙精度浮點型
date_range 64位整數, 毫秒計時
ip_range IP值的範圍, 支持IPV4和IPV6, 或者這兩種同時存在
複合數據類型
一、數組類型
二、對象類型
三、嵌套類型 nested
地理數據類型
一、地理點類型 - geo point
二、地理形狀類型 - geo_shape
專業領域數據類型
IP類型
計數數據類型 - token_count
創建指定Mapping type的索引庫 (一個Mapping Type包括兩部分,Meta-fields、Fields or properties)
PUT /my-index
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}