• ElasticSearch7.3学习(十二)type底层结构及弃用原因


    1、type是什么

    type,是一个index中用来区分类似的数据的。类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器、field的value。

    在底层的lucene中建立索引的时候,全部是opaque bytes类型,不区分类型的。

    lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即type。

    ElasticSearch通过type来进行type的过滤和筛选。

    2、es中不同type存储机制

    一个index中的多个type,实际上是放在一起存储的,因此一个index下,不能有多个type重名,而类型或者其他设置不同的,因为那样是无法处理的。注意:下面语句博主没有实验过,只是浏览了一遍,加深自己的理解。

    {
       "goods": {
          "mappings": {
             "electronic_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"
                   }
                    }
             }
          }
       }
    }
    PUT /goods/electronic_goods/1
    {
      "name": "小米空调",
      "price": 1999.0,
      "service_period": "one year"
    }
    PUT /goods/fresh_goods/1
    {
      "name": "澳洲龙虾",
      "price": 199.0,
      "eat_period": "one week"
    }

    es文档在底层的存储是这样子的

    {
       "goods": {
          "mappings": {
            "_type": {
              "type": "string",
              "index": "false"
            },
            "name": {
              "type": "string"
            }
            "price": {
              "type": "double"
            }
            "service_period": {
              "type": "string"
            },
            "eat_period": {
              "type": "string"
            }
          }
       }
    }

    底层数据存储格式

    {
      "_type": "electronic_goods",
      "name": "小米空调",
      "price": 1999.0,
      "service_period": "one year",
      "eat_period": ""
    }
    {
      "_type": "fresh_goods",
      "name": "澳洲龙虾",
      "price": 199.0,
      "service_period": "",
      "eat_period": "one week"
    }

    3、type弃用

    同一索引下,不同type的数据也会存储其他type的field的大量空值,造成资源浪费。所以,不同类型数据,要放到不同的索引中。在es9中,将会彻底删除type。

     

     

  • 相关阅读:
    Android 视图切换库的使用
    Ext3.4--TreeGridDemo
    Extjs不错的博客
    Extjs学习笔记--(六,选择器)
    Webservice简单案例
    Extjs学习笔记--(五,事件)
    Extjs学习笔记--(四,基本函数介绍)
    Extjs学习笔记--(三,调试技巧)
    SQL集合运算:差集、交集、并集
    Extjs学习笔记--(二)
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/16024219.html
Copyright © 2020-2023  润新知