elasticsearch type類型創建時注意項目,最新的elasticsearch已經不建議一個索引下多個type


https://www.elastic.co/guide/cn/elasticsearch/guide/current/mapping.html
如果有兩個不同的類型,每個類型都有同名的字段,但映射不同(例如:一個是字符串一個是數字),將會出現什么情況?
簡單回答是,Elasticsearch 不會允許你定義這個映射。當你配置這個映射時,將會出現異常。
詳細回答是,每個 Lucene 索引中的所有字段都包含一個單一的、扁平的模式。一個特定字段可以映射成 string 類型也可以是 number 類型,但是不能兩者兼具。因為類型是 Elasticsearch 添加的 優於 Lucene 的額外機制(以元數據 _type 字段的形式),在 Elasticsearch 中的所有類型最終都共享相同的映射。
以 data 索引中兩種類型的映射為例:

{
   "data": {
      "mappings": {
         "people": {
            "properties": {
               "name": {
                  "type": "string",
               },
               "address": {
                  "type": "string"
               }
            }
         },
         "transactions": {
            "properties": {
               "timestamp": {
                  "type": "date",
                  "format": "strict_date_optional_time"
               },
               "message": {
                  "type": "string"
               }
            }
         }
      }
   }
}

每個類型定義兩個字段 (分別是 "name"/"address" 和 "timestamp"/"message" )。它們看起來是相互獨立的,但在后台 Lucene 將創建一個映射,如:

{
   "data": {
      "mappings": {
        "_type": {
          "type": "string",
          "index": "not_analyzed"
        },
        "name": {
          "type": "string"
        }
        "address": {
          "type": "string"
        }
        "timestamp": {
          "type": "long"
        }
        "message": {
          "type": "string"
        }
      }
   }
}

注: 這不是真實有效的映射語法,只是用於演示
對於整個索引,映射在本質上被 扁平化 成一個單一的、全局的模式。這就是為什么兩個類型不能定義沖突的字段:當映射被扁平化時,Lucene 不知道如何去處理。

結論
技術上講,多個類型可以在相同的索引中存在,只要它們的字段不沖突(要么因為字段是互為獨占模式,要么因為它們共享相同的字段)。
重要的一點是: 類型可以很好的區分同一個集合中的不同細分。在不同的細分中數據的整體模式是相同的(或相似的)。
類型不適合 完全不同類型的數據 。如果兩個類型的字段集是互不相同的,這就意味着索引中將有一半的數據是空的(字段將是 稀疏的 ),最終將導致性能問題。在這種情況下,最好是使用兩個單獨的索引。


在Elaticsearch 6.x版本中已經只允許一個索引下只有一個type,聲明多個type已經標記為過期,但是仍可以使用。7.0之后的版本將完全移除
https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html


免責聲明!

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



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