ElasticSearch(二十七)type的數據結構

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

相關文章
相關標籤/搜索