|核心類型|字符串類型|字符串、文本、關鍵字|
|整數類型|整數、長整型、短整型、字節型|
|浮點類型| double、float、half _ float、scaled _ float |
|邏輯類型|布爾型|
日期類型|日期|
|範圍類型|範圍|
二進制類型|二進制|
|復合類型|數組類型|數組|
|對象類型|對象|
|嵌套類型|嵌套|
|地理類型|地理坐標類型|地理點|
地理地圖|地理形狀|
|特殊類型| IP類型| ip |
|範圍類型|完成|
|令牌計數類型|令牌計數|
|附件類型|附件|
提取類型|過濾器|
(1)字符串
String類型在舊版ElasticSearch中被廣泛使用。從ElasticSearch 5.x開始,不再支持string,取而代之的是文本和關鍵字類型。
(2)文本
當要在全文中搜索字段時,如電子郵件內容和產品描述,應使用文本類型。設置文本類型後,將對字段的內容進行分析,在生成倒排索引前,分析器將字符串劃分為單詞項。文本類型的字段不用於排序,也很少用於聚合。
(3)關鍵詞
關鍵字類型適用於索引結構化字段,如電子郵件地址、主機名、狀態代碼和標簽。如果需要對字段進行過濾(例如,在已發布的博客中查找具有status屬性的已發布文章)、排序和聚合。關鍵字類型的字段只能通過精確值進行搜索。
在滿足要求的情況下,選擇盡可能小的數據類型。比如壹個字段的最大值不會超過100,可以選擇字節類型。至今吉尼斯記錄的最大年齡是134歲。對於年齡領域,短就夠了。字段長度越短,索引和搜索的效率越高。
對於float,half_float和scaled_float,-0.0和+0.0是不同的值。使用$ term查詢查找-0.0將不匹配+0.0。同樣,在範圍查詢中,上邊界是-0.0,下邊界是+0.0,不會匹配-0.0。
其中以scaled_float為例,價格只需要精確到分鐘,價格為57.34的字段縮放因子為100,存儲時為5734。
首選使用帶縮放因子的scaled_float浮點類型。
我們人類使用的計時系統相當復雜:秒是基本的UNIX,60秒是1分鐘,60分鐘是1小時,24小時是壹天...如果計算機使用同樣的方式來計時,顯然會使用多個變量來分別存儲年、月、日、時、分,並不斷地進行進位運算,還要處理偶然的閏年和閏秒以及協調不同的時區。
日期類型可以用以下格式表示:
(1)日期格式字符串,如“2018-01-13”或“2018-01-13 12:65438”。
(UNIX誕生之日起的毫秒數(epoch指UTC時間1970 65438+10月1: 00: 00)。
(3)自3)整數的紀元以來的秒數。
ElasticSearch在內部將日期數據轉換為UTC,並將其存儲為壹個自紀元以來的長整數。
示例:日期格式數據
(1)創建索引
(2)編寫文檔
(3)批量查詢
邏輯類型(布爾類型)可以接受真/假/“真”/“假”值。
(1)在創建索引之前,請將其刪除。
(2)添加壹個文檔
(3)檢查文檔
二進制字段是指base64表示的索引中存儲的二進制數據,可以用來存儲二進制數據,比如圖像。默認情況下,這種類型的字段只存儲非索引。二進制類型僅支持index_name屬性。
在ElasticSearch中,沒有特殊的數組數據類型,但是默認情況下,任何字段都可以包含0個或多個值,也就是說每個字段默認都是數組類型,但是數組類型的每個元素值的數據類型必須相同。在ElasticSearch中,數組是開箱即用的,不需要任何配置就可以直接使用。
在同壹個數組中,數組元素的數據類型是相同的。ElasticSearch不支持多種數據類型的元素:[10," some string"]。常用的數組類型有:
(1)字符數組:["one "," two"]
(2)整數數組:productid:[ 1,2]
(3)對象(文檔)數組:“用戶”:[{“姓名”:“瑪麗”,“年齡”:12},{“姓名”:“約翰”,“年齡”:10}],對象數組在ElasticSearch中展開。
JSON本質上是分層的,文檔包含嵌套的對象。
上面的文檔整體上是壹個JSON,JSON包含壹個employee,employee也包含壹個fullname。
ip類型字段用於存儲IPv4或IPv6的地址。
(1)創建索引
(2)查詢字段