1. 程式人生 > >Elasticsearch入門必備——ES中的欄位型別以及常用屬性

Elasticsearch入門必備——ES中的欄位型別以及常用屬性

使用Elasticsearch時,瞭解欄位的概念,是必不可少的。畢竟無論是es還是傳統的資料庫,都無法弱化欄位的型別。

背景知識

在Es中,欄位的型別很關鍵:

  • 在索引的時候,如果欄位第一次出現,會自動識別某個型別,這種規則之前已經講過了。
  • 那麼如果一個欄位已經存在了,並且設定為某個型別。再來一條資料,欄位的資料不與當前的型別相符,就會出現欄位衝突的問題。如果發生了衝突,在2.x版本會自動拒絕。
  • 如果自動對映無法滿足需求,就需要使用者自己來設定對映型別,因此,就需要使用者瞭解ES中的型別。

下面就步入正題吧!

欄位中的索引和儲存

其中需要說明的是:

index定義欄位的分析型別以及檢索方式

  • 如果是no,則無法通過檢索查詢到該欄位;
  • 如果設定為not_analyzed則會將整個欄位儲存為關鍵詞,常用於漢字短語、郵箱等複雜的字串;
  • 如果設定為analyzed則將會通過預設的standard分析器進行分析,詳細的分析規則參考這裡

store定義了欄位是否儲存

在《ES IN ACTION》中有這樣一段描述:

This might be useful when you ask Elasticsearch for a particular field because retrieving a single stored field will be faster than retrieving the entire _source and extracting that field from it, especially when you have large documents.
NOTE When you store individual fields as well, you should take into account that the more you store, the bigger your index gets. Usually bigger indices imply slower indexing and slower searching.

意思是,在ES中原始的文字會儲存在_source裡面(除非你關閉了它)。預設情況下其他提取出來的欄位都不是獨立儲存的,是從_source裡面提取出來的。當然你也可以獨立的儲存某個欄位,只要設定store:true即可。

獨立儲存某個欄位,在頻繁使用某個特殊欄位時很常用。而且獲取獨立儲存的欄位要比從_source中解析快得多,而且額外你還需要從_source中解析出來這個欄位,尤其是_source特別大的時候。

不過需要注意的是,獨立儲存的欄位越多,那麼索引就越大;索引越大,索引和檢索的過程就會越慢....

string

字串型別,es中最常用的型別,官方文件

比較重要的引數:

index分析
  • analyzed(預設)
  • not_analyzed
  • no
store儲存
  • true 獨立儲存
  • false(預設)不儲存,從_source中解析

Numeric

數值型別,注意numeric並不是一個型別,它包括多種型別,比如:long,integer,short,byte,double,float,每種的儲存空間都是不一樣的,一般預設推薦integer和float。官方文件參考

重要的引數:

index分析
  • not_analyzed(預設) ,設定為該值可以保證該欄位能通過檢索查詢到
  • no
store儲存
  • true 獨立儲存
  • false(預設)不儲存,從_source中解析

date

日期型別,該型別可以接受一些常見的日期表達方式,官方文件參考

重要的引數:

index分析
  • not_analyzed(預設) ,設定為該值可以保證該欄位能通過檢索查詢到
  • no
store儲存
  • true 獨立儲存
  • false(預設)不儲存,從_source中解析
format格式化
  • strict_date_optional_time||epoch_millis(預設)
  • 你也可以自定義格式化內容,比如
"date": {
  "type":   "date",
  "format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}

IP

這個型別可以用來標識IPV4的地址,參考官方文件

常用引數:

index分析
  • not_analyzed(預設) ,設定為該值可以保證該欄位能通過檢索查詢到
  • no
store儲存
  • true 獨立儲存
  • false(預設)不儲存,從_source中解析

boolean

布林型別,所有的型別都可以標識布林型別,參考官方文件

  • False: 表示該值的有:false, "false", "off", "no", "0", "" (empty string), 0, 0.0
  • True: 所有非False的都是true

重要的引數:

index分析
  • not_analyzed(預設) ,設定為該值可以保證該欄位能通過檢索查詢到
  • no
store儲存
  • true 獨立儲存
  • false(預設)不儲存,從_source中解析