ES7-字段類型

1.ElasticSearch中字段類型

2.字符串類型

string

string類型在ElasticSearch 舊版本中使用較多,從ElasticSearch 5.x開始再也不支持string,由text和keyword類型替代。html

text

當一個字段是要被全文搜索的,好比Email內容、產品描述,應該使用text類型。設置text類型之後,字段內容會被分析,在生成倒排索引之前,字符串會被分析器分紅一個一個詞項。text類型的字段不用於排序,不多用於聚合。數組

keyword 

keyword類型適用於索引結構化的字段,好比email地址、主機名、狀態碼和標籤。若是字段須要進行過濾(好比查找已發佈博客中status屬性爲published的文章)、排序、聚合。keyword類型的字段只能經過精確值搜索到。app

3.整說類型

類型 取值範圍
byte -128~127
short -32768~32767
integer -231~231-1
long -263~263-1

在知足需求的狀況下,儘量選擇範圍小的數據類型。好比,某個字段的取值最大值不會超過100,那麼選擇byte類型便可。迄今爲止吉尼斯記錄的人類的年齡的最大值爲134歲,對於年齡字段,short足矣。字段的長度越短,索引和搜索的效率越高。elasticsearch

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。ide

其中scaled_float,好比價格只須要精確到分,price爲57.34的字段縮放因子爲100,存起來就是5734 
優先考慮使用帶縮放因子的scaled_float浮點類型。測試

5.date類型

日期類型表示格式能夠是如下幾種:ui

(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)spa

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

定義日期類型和日誌格式:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html#strict-date-timecode

6.boolean類型

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

PUT information
{
  "mappings": {
    "record": {
      "properties": {
        "is_delete": {
          "type": "boolean"
        }
      }
    }
  }
}

新建文檔:

PUT information/record/1
{
  "is_delete": "true"
}

PUT information/record/2
{
  "is_delete":false
}

查詢文檔;

GET information/record/_mget
{
  "ids":[1,2]
}

查詢結果:

{
  "docs": [
    {
      "_index": "information",
      "_type": "record",
      "_id": "1",
      "_version": 1,
      "found": true,
      "_source": {
        "is_delete": "true"
      }
    },
    {
      "_index": "information",
      "_type": "record",
      "_id": "2",
      "_version": 1,
      "found": true,
      "_source": {
        "is_delete": false
      }
    }
  ]
}

7.binary類型

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

8.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]}

9.object類型

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

PUT information/record/1
{
  "title": "這是一個測試",
  "event": {
    "name": "sacn掃描",
    "times": 20
  }
}

建立文檔包含title和event兩個屬性,其中event爲對象類型也包含兩個屬性name和times。

{
  "_index": "information",
  "_type": "record",
  "_id": "1",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

查詢mapping結構:

{
  "information": {
    "mappings": {
      "record": {
        "properties": {
          "event": {
            "properties": {
              "name": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "times": {
                "type": "long"
              }
            }
          },
          "title": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

10.IP類型

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

PUT information
{
  "mappings": {
    "record": {
      "properties": {
        "attack_ip": {
          "type": "ip"
        }
      }
    }
  }
}

新增文檔:

PUT information/record/1
{
  "attack_ip":"10.118.213.192"
}

查詢文檔:

GET information/record/1

查詢結果:

{
  "_index": "information",
  "_type": "record",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "attack_ip": "10.118.213.192"
  }
}
相關文章
相關標籤/搜索