ElasticSearch 學習筆記 - 7. 字段類型

一、字符串類型

(1)string
string類型在ElasticSearch 舊版本中使用較多,從ElasticSearch 5.x開始再也不支持string,由text和keyword類型替代。
(2)text
當一個字段是要被全文搜索的,好比Email內容、產品描述,應該使用text類型。
設置text類型之後,字段內容會被分析,在生成倒排索引之前,字符串會被分析器分紅一個一個詞項。text類型的字段不用於排序,不多用於聚合
(3)keyword
keyword類型適用於索引結構化的字段,好比email地址、主機名、狀態碼和標籤。
若是字段須要進行過濾(好比查找已發佈博客中status屬性爲published的文章)、排序、聚合。
keyword類型的字段只能經過精確值搜索到。node

二、整數類型

類型 取值範圍
byte -128~127
short -32768~32767
integer -2^31~2^31-1
long -2^63~2^63-1

三、浮點類型

double,float ,half_float,scaled_float數組

四、date類型

UNIX在內部採用了一種最簡單的計時方式app

  • 計算從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.

ElasticSearch 內部會將日期數據轉換爲UTC,並存儲爲milliseconds-since-the-epoch的long型整數。 post

相關操做:code

1.建立索引
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"]
}

五、boolean類型

邏輯類型(布爾類型)能夠接受true/false/」true」/」false」值orm

六、binary類型

二進制字段是指用base64來表示索引中存儲的二進制數據,可用來存儲二進制形式的數據,例如圖像。默認狀況下,該類型的字段只存儲不索引。二進制類型只支持index_name屬性。對象

七、array類型

在ElasticSearch中,沒有專門的數組(Array)數據類型,
可是,在默認狀況下,任意一個字段均可以包含0或多個值,這意味着每一個字段默認都是數組類型排序

在同一個數組中,數組元素的數據類型是相同的,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]}ip

八、object類型

JSON天生具備層級關係,文檔會包含嵌套的對象

DELETE test

PUT test

PUT test/my/1
{
  "employee":{
    "age":30,
    "fullname":{
      "first":"hadron",
      "last":"cheng"
    }
  }
}

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
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

九、ip類型

ip類型的字段用於存儲IPv4或者IPv6的地址

PUT test
{
  "mappings": {
    "my":{
      "properties": {
        "nodeIP":{
          "type": "ip"
        }
      }
    }
  }
}
相關文章
相關標籤/搜索