text
, keyword
long
, integer
, short
, byte
, double
, float
, half_float
, scaled_float
boolean
date
, date_nanos
binary
integer_range
, float_range
, long_range
, double_range
, date_range
text 類型的字段數據會被分詞,在生成倒排索引之前,字符串會被分詞器分紅一個一個詞項。
text 類型的字段不用於排序,不多用於聚合(termsAggregation除外)。
若是一個字段須要被全文搜索或模糊匹配,好比文章內容、產品描述、新聞內容等,應該使用text類型。html
keyword 類型的字段內容不會被分詞。
keyword 類型的字段只能經過精確值搜索到,用於過濾、排序、聚合。
適用於索引結構化的字段,好比IP地址、性別和地區等。json
類型 | 最小值 | 最大值 | 說明 |
---|---|---|---|
byte | -128 | 127 | 8 位有符號整數(1個字節),至關於MySQL中有符號的 tinyint |
short | -32768 | 32767 | 16 位有符號整數(2個字節),至關於MySQL中有符號的 smallint |
integer | -2147483648 (-2^31^) |
2147483647 (2^31^-1) |
32 位有符號整數(4個字節),至關於MySQL中有符號的 int |
long | -9223372036854775808) (-2^63^) |
9223372036854775807 (2^63^-1) |
64 位有符號整數(8個字節),至關於MySQL中有符號的 bigint |
對於整數類型的字段,在知足需求的狀況下,要儘量選擇範圍小的數據類型。好比某個字段的取值最大值不會超過100,那麼選擇byte類型便可。迄今爲止,吉尼斯世界記錄的人類的年齡的最大值爲134歲,對於年齡字段,short足矣。字段的長度越短,索引和搜索的效率越高。數組
類型 | 最小值 | 最大值 | 說明 |
---|---|---|---|
half_float | 2^-24^ | 65504 | 16位半精度浮點數 |
float | 2^-149^ | (2-2^-23^)·2^127^ | 32位單精度浮點數 |
double | 2^-1074^ | (2-2^-52^)·2^1023^ | 64位雙精度浮點數 |
scaled_float | 縮放類型浮點數 |
處理浮點數時,優先考慮使用scaled float類型。scaled float 是經過縮放因子把浮點數變成long類型,好比價格只須要精確到分,price字段的取值爲57.34,設置放大因子爲100,存儲起來就是5734,全部的API都會把price的取值看成浮點數,事實上Elasticsearch底層存儲的是整數類型,由於壓縮整數比壓縮浮點數更加節省存儲空間。數據結構
若是一個字段是布爾類型,可接受的值爲 true
, false
。
Elasticsearch 5.4版本之前,能夠接受可被解釋爲 true
或 false
的字符串和數字。
5.4版本之後只接受 true
, false
, "true"
, "false"
。app
JSON 沒有日期型數據類型,因此在Elasticsearch中,日期能夠是:elasticsearch
Elasticsearch內部會把日期轉換爲 UTC (世界標準時間),並將其存儲爲表明時間毫秒數的長整數。
日期格式能夠自定義,若是沒有指定格式,則使用默認值:ide
"strict_date_optional_time||epoch_millis"
這種狀況下能夠解析下面三種日期格式:優化
"2020-05-01" "2020-05-01T12:10:30Z" 1591234567890
此數據類型是對日期數據類型的補充。現有的 date 類型能夠存儲毫秒級時間。而 date_nanos 能夠存儲納秒級時間。ui
二進制數據類型接受Base64編碼字符串的二進制值。字段不以默認方式存儲並且不能搜索。
Base64編碼二進制值不能嵌入換行符\n
編碼
類型 | 說明 |
---|---|
integer_range |
32 位有符號整數的範圍值,-2^31^ ~ 2^31^-1 |
long_range |
62 位有符號整數的範圍值,-2^63^ ~ 2^63^-1 |
float_range |
32位單精度浮點數範圍值 |
double_range |
64位單精度浮點數範圍值 |
date_range |
以64位無符號整數形式表示的日期值範圍 |
ip_range |
IPv4 或 IPv6 的範圍值 |
用於存儲單個JSON對象。
JSON本質上具備層級關係,文檔包含內部對象,內部對象自己還能夠包含內部對象。
用於存儲多個JSON對象組成的數組。nested
類型是 object
類型中的一個特例,可讓對象數組獨立索引和查詢。Lucene沒有內部對象的概念,因此Elasticsearch將對象層次扁平化,轉化成字段名字和值構成的簡單列表。
用於存儲經緯度座標對,可用來
查找必定範圍內的地理點,這個範圍能夠是相對於一箇中心點的固定距離,也能夠是多邊形或者地理散列單元。
經過地理位置或者相對於中心點的距離聚合文檔。
整合距離到文檔的相關性評分中。
用於存儲地理位置信息的經緯度座標對,可用於如下幾種場景:
地理形狀數據類型有利於索引和搜索任意地理形狀,例如矩形、三角形或者其餘多邊形。不管是數據被索引仍是在查詢執行的過程當中,均可以使用地理形狀數據類型在地理點的基礎上包含地理形狀。
Elasticsearch 使用 GeoJSON
格式來表示地理形狀。GeoJSON
是一種對各類地理數據結構進行編碼的格式,對象能夠表示幾何、特徵或者特徵集合,支持點、線、面、多點、多線、多面等幾何類型。GeoJSON
裏的特徵包含一個幾何對象和其餘屬性,特徵集合表示一系列特徵。
想了解更多關於 GeoJSON
的資料可參考《GeoJSON格式規範說明》
IP地址類型,存儲 IPv4 和 IPv6 地址
completion
提供自動補全建議
token_count
用於統計字符串分詞後的詞項個數,本質上是一個整數型字段。
例如:映射中指定 name 爲 text 類型,增長 name_length 字段用於統計分詞後詞項的長度,類型爲 token_count,分詞器爲標準分詞器。
mapper-murmur3
murmur3
在索引時計算值的哈希值並將它們存儲在索引中
mapper-annotated-text
annotated-text
索引包含特殊標記的文本(一般用於標識命名實體)
接受來自 query-dsl
的查詢
爲同一索引中的文檔定義父/子關係
排名功能,記錄數字特性以提升查詢時的命中率
密集向量,記錄浮點值的密集向量
稀疏向量,記錄浮點值的稀疏向量
按類型搜索,相似文本的字段,爲查詢進行優化,以實現按類型完成
別名,定義現有字段的別名
容許將整個JSON對象做爲單個字段編入索引。
shape
for arbitrary cartesian geometries.
histogram
for pre-aggregated numerical values for percentiles aggregations.
數組類型不須要專門指定數組元素的類型,任何字段類型均可以包含在數組內,可是數組中的全部值必須具備相同的數據類型。
["one", "two"]
[1, 2]
[1, [2, 3]]
等同於 [1, 2, 3]
[{"name": "Mary", "age": 12}, {"name": "John", "age": 10}]
參考文獻:官方文檔v7.6:字段數據類型《從Lucene到Elasticsearch全文檢索實戰》《Elasticsearch技術解析與實戰》