elasticsearch映射的數據類型有哪些?json類型與特有類型


Elasticsearch數據類型

Elasticsearch自帶的數據類型是Lucene索引的依據,也是我們做手動映射調整的依據。
映射中主要就是針對字段設置類型以及類型相關參數。


1.JSON基礎類型如下:


字符串:string
數字:byte、short、integer、long、float、double、
時間:date
布爾值: true、false
數組: array
對象: object

2.Elasticsearch獨有的類型:


多重: multi
經緯度: geo_point
網絡地址: ip
堆疊/嵌套對象: nested object
二進制: binary
附件: attachment

注意點:

1.映射應當在建立索引時,同時建立。如果索引建立后,還想做在索引中增加其他類型的映射,是不可以的。elasticsearch 對沒有做映射的類型,都已經指定默認映射。
2.Elasticsearch映射雖然有idnex和type兩層關系,但是實際索引時是以index為基礎的。如果同一個index下不同type的字段出現mapping不一致的情況,雖然數據依然可以成功寫入並生成各自的mapping,但實際上fielddata中的索引結果卻依然是以index內第一個mapping類型來生成的。

自定義字段映射

Elasticsearch的Mapping提供了對Elasticsearch中索引字段名及其數據類型的定義,還可以對某些字段添加特殊屬性:該字段是否分詞,是否存儲,使用什么樣的分詞器等。

精確索引:

字段都有幾個基本的映射選項,類型(type)和索引方式(index)。以字符串類型為例,index有三個選項:
analyzed:默認選項,以標准的全文索引方式,分析字符串,完成索引。
not_analyzed:精確索引,不對字符串做分析,直接索引字段數據的精確內容。
no:不索引該字段。

對於日志文件來說,很多字段都是不需要再Elasticsearch里做分析這步的,所以,我們可以這樣設置:

"myfieldname" : {
	"type" : "string",
	"index" : "not_analyzed"
}



時間格式:

@timestamp這個時間格式在Nginx中叫$time_iso8601,在Rsyslog中叫date-rfc3339,在Elasticsearch中叫dateOptionalTime.但事實上,Elasticsearch完全可以接受其他時間格式作為時間字段的內容。對於Elasticsearch來說,時間字段內容實際上就是轉換成long類型作為內部存儲的。所以,接受段的時間格式可以任意設置:

@timestamp: {
	"type" : "date",
	"index" : "not_analyzed",
	"doc_values" : true,
	"format" : "dd/MM/YYYY:HH:mm:ss Z"
}

 

多重索引:

多重索引是Logstash用戶習慣的的一個映射,因為這是Logstash默認開啟的配置:

"title" : {
	"type" : "string",
	"fields" : {
		"raw" : {
			"type" : "string",
			"index" : "not_analyzed"		
		}
	}
}

其作用時,在title字段數據寫入的時候,Elasticsearch會自動生成兩個字段,分別是title和title.raw。這樣,有可能同時需要分詞和不分詞結果的環境,就可以很靈活的使用不同的索引字段了。比如,查看標題中最常用的單詞,應該是使用title字段,查看閱讀數最多的文章標題,應該是使用title.raw字段。

多值字段:

空字段:

數組可以是空的。這等於有零個值。事實上,Lucene沒法存放null值,所以一個null值的字段被認為是空字段。
下面這四個字段將被識別為空字段而不被索引:
"empty_string" : "",
"null_value" : null,
"empty_array" : [],
"array_with_null_value" : [ null ]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM