zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JAVA日报
    JAVA日报
    论文爬取(七)
    论文爬取(六)
    论文爬取(五)
    JAVA日报
    JAVA日报
    剑指 Offer 68
    剑指 Offer 68
    剑指 Offer 67. 把字符串转换成整数
  • 原文地址:https://www.cnblogs.com/gavinYang/p/11200212.html
Copyright © 2011-2022 走看看