1.什麼是type?數據結構
type,是一個index中用來區分相似的數據的,相似的數據,可是可能有不一樣的fields,並且有不一樣的屬性來控制索引創建、分詞器
field的value,在底層的lucene中創建索引的時候,所有是opaque bytes類型,不區分類型的。
lucene是沒有type的概念的,在document中,實際上將type做爲一個document的field來存儲,即_type,es經過_type來進行type的過濾和篩選app
2.type的數據結構是怎麼存儲的?性能
一個index中的多個type,其實是放在一塊兒存儲的,所以一個index下,不能有多個type重名,而類型或者其餘設置不一樣的,由於那樣是沒法處理的。spa
好比說一個index下有這樣兩個type:code
{ "ecommerce": { "mappings": { "elactronic_goods": { "properties": { "name": { "type": "string", }, "price": { "type": "double" }, "service_period": { "type": "string" } } }, "fresh_goods": { "properties": { "name": { "type": "string", }, "price": { "type": "double" }, "eat_period": { "type": "string" } } } } } }
新增兩條document:blog
{ "name": "geli kongtiao", "price": 1999.0, "service_period": "one year" } { "name": "aozhou dalongxia", "price": 199.0, "eat_period": "one week" }
在底層的存儲是這樣子的。。。。索引
{ "_type": "elactronic_goods", "name": "geli kongtiao", "price": 1999.0, "service_period": "one year", "eat_period": "" } { "_type": "fresh_goods", "name": "aozhou dalongxia", "price": 199.0, "service_period": "", "eat_period": "one week" }
3.在同一個index下是否要創建多個type?string
最佳實踐,將相似結構的type放在一個index下,這些type應該有多個field是相同的
假如說,你將兩個type的field徹底不一樣,放在一個index下,那麼就每條數據都至少有一半的field在底層的lucene中是空值,會有嚴重的性能問題io