Elasticsearch資料型別及其屬性

weixin_34253539發表於2018-12-30

Elasticsearch資料型別及其屬性

一、資料型別

欄位型別概述
一級分類 二級分類 具體型別
核心型別 字串型別 string,text,keyword
h 整數型別 integer,long,short,byte
h 浮點型別 double,float,half_float,scaled_float
h 邏輯型別 boolean
h 日期型別 date
h 範圍型別 range
h 二進位制型別 binary
複合型別 陣列型別 array
f 物件型別 object
f 巢狀型別 nested
地理型別 地理座標型別 geo_point
d 地理地圖 geo_shape
特殊型別 IP型別 ip
t 範圍型別 completion
t 令牌計數型別 token_count
t 附件型別 attachment
t 抽取型別 percolator
核心型別
  • 1、字串型別
      string型別: 在ElasticSearch 舊版本中使用較多,從ElasticSearch 5.x開始不再支援string,由text和keyword型別替代。
      text 型別:當一個欄位是要被全文搜尋的,比如Email內容、產品描述,應該使用text型別。設定text型別以後,欄位內容會被分析,在生成倒排索引以前,字串會被分析器分成一個一個詞項。text型別的欄位不用於排序,很少用於聚合。
      keyword
    keyword型別適用於索引結構化的欄位,比如email地址、主機名、狀態碼和標籤。如果欄位需要進行過濾(比如查詢已釋出部落格中status屬性為published的文章)、排序、聚合。keyword型別的欄位只能通過精確值搜尋到。

  • 2、整數型別

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

    在滿足需求的情況下,儘可能選擇範圍小的資料型別。比如,某個欄位的取值最大值不會超過100,那麼選擇byte型別即可。迄今為止吉尼斯記錄的人類的年齡的最大值為134歲,對於年齡欄位,short足矣。欄位的長度越短,索引和搜尋的效率越高。

  • 3、浮點型別

    型別 取值範圍
    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浮點型別。

  • 4、date型別
    日期型別表示格式可以是以下幾種:
    (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)

  • 5、boolean型別 true和false

  • 6、 binary型別
      進位制欄位是指用base64來表示索引中儲存的二進位制資料,可用來儲存二進位制形式的資料,例如影像。預設情況下,該型別的欄位只儲存不索引。二進位制型別只支援index_name屬性。

  • 7、array型別
    (1)字元陣列: [ “one”, “two” ]
    (2)整數陣列: productid:[ 1, 2 ]
    (3)物件(文件)陣列: “user”:[ { “name”: “Mary”, “age”: 12 }, { “name”: “John”, “age”: 10 }],
    注意:lasticSearch不支援元素為多個資料型別:[ 10, “some string” ]

  • 8、 object型別
    JSON物件,文件會包含巢狀的物件

  • 9、ip型別
    p型別的欄位用於儲存IPv4或者IPv6的地址

二、Mapping 支援屬性

  • 1、enabled:僅儲存、不做搜尋和聚合分析

      "enabled":true (預設)| false
    
  • 2、index:是否構建倒排索引(即是否分詞,設定false,欄位將不會被索引)

          "index": true(預設)| false
    
  • 3、index_option:儲存倒排索引的哪些資訊

      4個可選引數:
          docs:索引文件號
          freqs:文件號+詞頻
          positions:文件號+詞頻+位置,通常用來距離查詢
          offsets:文件號+詞頻+位置+偏移量,通常被使用在高亮欄位
      分詞欄位預設是positions,其他預設時docs
      
      "index_options": "docs"
    
  • 4、norms:是否歸一化相關引數、如果欄位僅用於過濾和聚合分析、可關閉
    分詞欄位預設配置,不分詞欄位:預設{“enable”: false},儲存長度因子和索引時boost,建議對需要參加評分欄位使用,會額外增加記憶體消耗

      "norms": {"enable": true, "loading": "lazy"}
    
  • 5、doc_value:是否開啟doc_value,使用者聚合和排序分析
    對not_analyzed欄位,預設都是開啟,分詞欄位不能使用,對排序和聚合能提升較大效能,節約記憶體

      "doc_value": true(預設)| false
    
  • 6、fielddata:是否為text型別啟動fielddata,實現排序和聚合分析
    針對分詞欄位,參與排序或聚合時能提高效能,不分詞欄位統一建議使用doc_value

      "fielddata": {"format": "disabled"}
    
  • 7、store:是否單獨設定此欄位的是否儲存而從_source欄位中分離,只能搜尋,不能獲取值

      "store": false(預設)| true
    
  • 8、coerce:是否開啟自動資料型別轉換功能,比如:字串轉數字,浮點轉整型

      "coerce: true(預設)| false"
    
  • 9、multifields:靈活使用多欄位解決多樣的業務需求

  • 11、dynamic:控制mapping的自動更新

      "dynamic": true(預設)| false | strict
    

1

  • 12、data_detection:是否自動識別日期型別

      "data_detection":true(預設)| false
    

dynamic和data_detection的詳解:Elasticsearch dynamic mapping(動態對映) 策略.

  • 13、analyzer:指定分詞器,預設分詞器為standard analyzer

      "analyzer": "ik"
    
  • 14、boost:欄位級別的分數加權,預設值是1.0

      "boost": 1.23
    
  • 15、fields:可以對一個欄位提供多種索引模式,同一個欄位的值,一個分詞,一個不分詞

      "fields": {"raw": {"type": "string", "index": "not_analyzed"}}
    
  • 16、ignore_above:超過100個字元的文字,將會被忽略,不被索引

      "ignore_above": 100
    
  • 17、include_in_all:設定是否此欄位包含在_all欄位中,預設時true,除非index設定成no

      "include_in_all": true
    
  • 18、null_value:設定一些缺失欄位的初始化,只有string可以使用,分詞欄位的null值也會被分詞

      "null_value": "NULL"
    
  • 19、position_increament_gap:影響距離查詢或近似查詢,可以設定在多值欄位的資料上或分詞欄位上,查詢時可以指定slop間隔,預設值時100

      "position_increament_gap": 0
    
  • 20、search_analyzer:設定搜尋時的分詞器,預設跟analyzer是一致的,比如index時用standard+ngram,搜尋時用standard用來完成自動提示功能

      "search_analyzer": "ik"
    
  • 21、similarity:預設時TF/IDF演算法,指定一個欄位評分策略,僅僅對字串型和分詞型別有效

      "similarity": "BM25"
    
  • 22、trem_vector:預設不儲存向量資訊,支援引數yes(term儲存),with_positions(term+位置),with_offsets(term+偏移量),with_positions_offsets(term+位置+偏移量)對快速高亮fast vector highlighter能提升效能,但開啟又會加大索引體積,不適合大資料量用

      "trem_vector": "no"
    

三、Mapping 欄位設定流程

11362584-34bc6bfcdf6a79f8
avatar

相關文章