1. 程式人生 > >ES字段類型

ES字段類型

官方 ppi -s 意思 都是 int htm more 布爾類型

背景知識

在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中解析

ES字段類型