ElasticSearch 6.x 學習筆記:12.欄位型別
12.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時間1970年1月1日0時0分0秒起, 流逝的秒數.
UTC時間1970年1月1日0時0分0秒就是UNIX時間0, UTC時間1970年1月2日0時0分0秒就是UNIX時間86400.
這個計時系統被所有的UNIX和類UNIX系統繼承了下來, 而且影響了許多非UNIX系統.
日期型別表示格式可以是以下幾種:
(1)日期格式的字串,比如 “2018-01-13” 或 “2018-01-13 12:10:30”
(2)long型別的毫秒數( milliseconds-since-the-epoch,epoch就是指UNIX誕生的UTC時間1970年1月1日0時0分0秒)
(3)integer的秒數(seconds-since-the-epoch)
ElasticSearch 內部會將日期資料轉換為UTC,並存儲為milliseconds-since-the-epoch的long型整數。
例子:日期格式資料
(1)建立索引
DELETE test
PUT test
{
"mappings":{
"my":{
"properties": {
"postdate":{
"type":"date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
(2)寫入文件
PUT test/my/1
{
"postdate":"2018-01-13"
}
PUT test/my/2
{
"postdate":"2018-01-01 00:01:05"
}
PUT test/my/3
{
"postdate":"1420077400001"
}
(3)批量查詢
GET test/my/_mget
{
"ids":["1","2","3"]
}
{
"docs": [
{
"_index": "test",
"_type": "my",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"postdate": "2018-01-13"
}
},
{
"_index": "test",
"_type": "my",
"_id": "2",
"_version": 1,
"found": true,
"_source": {
"postdate": "2018-01-01 00:01:05"
}
},
{
"_index": "test",
"_type": "my",
"_id": "3",
"_version": 2,
"found": true,
"_source": {
"postdate": "1420077400001"
}
}
]
}
12.6 boolean型別
邏輯型別(布林型別)可以接受true/false/”true”/”false”值
(1)先刪除已經存在的索引,再建立
DELETE test
PUT test
{
"mappings":{
"my":{
"properties": {
"empty":{"type":"boolean"}
}
}
}
}
(2)新增文件
PUT test/my/1
{
"empty":"true"
}
PUT test/my/2
{
"empty":false
}
(3)檢視文件
GET test/my/_mget
{
"ids":["1","2"]
}
{
"docs": [
{
"_index": "test",
"_type": "my",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"empty": "true"
}
},
{
"_index": "test",
"_type": "my",
"_id": "2",
"_version": 1,
"found": true,
"_source": {
"empty": false
}
}
]
}
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”:[ { “name”: “Mary”, “age”: 12 }, { “name”: “John”, “age”: 10 }],ElasticSearch內部把物件陣列展開為 {“user.name”: [“Mary”, “John”], “user.age”: [12,10]}
12.8 object型別
JSON天生具有層級關係,文件會包含巢狀的物件
DELETE test
PUT test
PUT test/my/1
{
"employee":{
"age":30,
"fullname":{
"first":"hadron",
"last":"cheng"
}
}
}
上面文件整體是一個JSON,JSON中包含一個employee,employee又包含一個fullname。
GET test/_mapping
{
"test": {
"mappings": {
"my": {
"properties": {
"employee": {
"properties": {
"age": { "type": "long"},
"fullname": {
"properties": {
"first": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"last": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}
}
}
}
12.9 ip型別
ip型別的欄位用於儲存IPv4或者IPv6的地址
(1)建立索引
DELETE test
PUT test
{
"mappings": {
"my":{
"properties": {
"nodeIP":{
"type": "ip"
}
}
}
}
}
(2)查詢欄位
GET test/_search
{
"query": {
"term": {
"nodeIP": "192.168.0.0/16"
}
}
}
{
"took": 111,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "test",
"_type": "my",
"_id": "1",
"_score": 1,
"_source": {
"nodeIP": "192.168.1.2"
}
}
]
}
}
相關推薦
ElasticSearch 6.x 學習筆記:12.欄位型別
12.1 欄位型別概述 一級分類 二級分類 具體型別 核心型別 字串型別 string,text,keyword 整數型別 integer,long,
ElasticSearch 6.x 學習筆記:6.索引
6.1 建立索引 (1)簡單方式 PUT test { "acknowledged": true, "shards_acknowledged": true, "index": "t
ElasticSearch 6.x 學習筆記:15.檢索入門
15.1 準備資料 [es@node1 ~]$ vi website.json [es@node1 ~]$ cat website.json { "index":{ "_index": "website", "_type": "blog", "_id"
ElasticSearch 6.x 學習筆記:2.head外掛
2.1 Head外掛簡介 ElasticSearch-head是一個H5編寫的ElasticSearch叢集操作和管理工具,可以對叢集進行傻瓜式操作。 顯示叢集的拓撲,並且能夠執行索引和節點級別操作 搜尋介面能夠查詢叢集中原始json或表格格式的檢索資料
ElasticSearch 6.x 學習筆記:31.Java API之詞項查詢
1、term查詢 Find documents which contain the exact term specified in the field specified. package cn.hadron; import cn.hadron.
ElasticSearch 6.x 學習筆記:7.文件
7.1 新建文件 index/type/id1 (1)一般格式 PUT blog/csdn/1 { "id":1, "title":"Elastic
ElasticSearch 6.x 學習筆記:20.搜尋排序
20.1 按照文件新增順序排序 GET website/_search GET website/_search { "query": { "match_all": {} } }
Spark2.x學習筆記:6、在Windows平臺下搭建Spark開發環境(Intellij IDEA)
Spark2.x學習筆記 6、 在Windows平臺下搭建Spark開發環境(Intellij IDEA+Maven) 6.1 整合開發環境IDE 為了方便應用程式開發與測試,提高開發效率,一般使用整合開發工具IDE。同樣,為了方便Spark應用程式編
LogStash官方文件6.x學習筆記---------day1
上個星期之前看過一段時間,對logstash基礎有一定了解。現在來好好記錄一下我的學習的東西。 logstash的工作流程: 由input--->filter---->output構成。 執行模型: Logstash事件處理管道協調input--
Spark2.x學習筆記:3、 Spark核心概念RDD
Spark學習筆記:3、Spark核心概念RDD 3.1 RDD概念 彈性分散式資料集(Resilient Distributed Datasets,RDD) ,可以分三個層次來理解: 資料集:故名思議,RDD 是資料集合的抽象,是複雜物理介質上存在資料的一種邏輯檢視。
Spark2.x學習筆記:2、Scala簡單例子
2、 Scala簡單例子2.1 互動式程式設計spark-shell是Spark互動式執行模式,提供了互動式程式設計,邊敲程式碼邊執行,不需要建立程式原始檔,方便除錯程式,有利於快速學習Spark。[[email protected] spark-2.2.0]# bin/spark-shell U
Spark2.x學習筆記:14、Spark SQL程式設計
Spark2.x學習筆記:14、 Spark SQL程式設計 14.1 RDD的侷限性 RDD僅表示資料集,RDD沒有元資料,也就是說沒有欄位語義定義。 RDD需要使用者自己優化程式,對程式設計師要求較高。 從不同資料來源讀取資料相對困難。 合併多個數
作業系統精髓與設計原理(原書第6版)——學習筆記(12)
3.2.3 五狀態模型 如果所有程序都做好了執行準備,則圖3.5b所給出的排隊規則是有效的。佇列是“先進先出”(FIFO)的表,對於可執行的程序處理器以一種輪轉方式操作(依次給佇列中的每個程
Cocos2d-x 3.x學習筆記:猩先生帶你打飛機(四)遊戲場景:背景與我機的建立、敵機的建立、物理世界構建
一、背景與我機的建立 現在我們要建立新的一個場景了。選擇開始遊戲即從選單場景跳到遊戲場景。現在先完善HelloWorldScene的程式碼 找到我們開始遊戲的回撥方法,新增程式碼: //開始遊戲 void HelloWorld::menuStartCa
ES[7.6.x]學習筆記(七)IK中文分詞器
在上一節中,我們給大家介紹了ES的分析器,我相信大家對ES的全文搜尋已經有了深刻的印象。分析器包含3個部分:字元過濾器、分詞器、分詞過濾器。在上一節的例子,大家發現了,都是英文的例子,是吧?因為ES是外國人寫的嘛,中國如果要在這方面趕上來,還是需要螢幕前的小夥伴們的~ 英文呢,我們可以按照空格將一句話、一
ES[7.6.x]學習筆記(八)資料的增刪改
在前面幾節的內容中,我們學習索引、欄位對映、分析器等,這些都是使用ES的基礎,就像在資料庫中建立表一樣,基礎工作做好以後,我們就要真正的使用它了,這一節我們要看看怎麼向索引裡寫入資料、修改資料、刪除資料,至於搜尋嘛,因為ES的主要功能就是搜尋,所以搜尋的相關功能我們後面會展開講。 ## Document的建
ES[7.6.x]學習筆記(九)搜尋
搜尋是ES最最核心的內容,沒有之一。前面章節的內容,索引、動態對映、分詞器等都是鋪墊,最重要的就是最後點選搜尋這一下。下面我們就看看點選搜尋這一下的背後,都做了哪些事情。 ## 分數(score) ES的搜尋結果是按照相關分數的高低進行排序的,咦?! 怎麼沒說搜尋先說搜尋結果的排序了?咱們這裡先把這個概念
ES[7.6.x]學習筆記(十一)與SpringBoot結合
在前面的章節中,我們把ES的基本功能都給大家介紹完了,從ES的搭建、建立索引、分詞器、到資料的查詢,大家發現,我們都是通過ES的API去進行呼叫,那麼,我們在專案當中怎麼去使用ES呢?這一節,我們就看看ES如何與我們的SpringBoot專案結合。 ## 版本依賴 SpringBoot預設是有Elasti
ES[7.6.x]學習筆記(十二)高亮 和 搜尋建議
ES當中大部分的內容都已經學習完了,今天呢算是對前面內容的查漏補缺,把ES中非常實用的功能整理一下,在以後的專案開發中,這些功能肯定是對你的專案加分的,我們來看看吧。 ## 高亮 高亮在搜尋功能中是十分重要的,我們希望搜尋的內容在搜尋結果中重點突出,讓使用者聚焦在搜尋的內容上。我們看看在ES當中是怎麼實現
Javascript高階程式設計學習筆記(12)—— 引用型別(1)Object型別
前面的文章中我們知道JS中的值分為兩種型別 基礎型別的值和引用型別的值 基礎型別的值我已經大概介紹了一下,今天開始後面幾天我會為大家介紹一下引用型別的值 Object型別 物件是引用型別的值的例項,在ECMA中引用型別是一種資料結構 用於將資料和功能組織到一起,在其它程式語言中通常也