ITPub博客

首页 > IT基础架构 > > Mapping--映射

Mapping--映射

作者:格伯纳 时间:2020-06-01 13:45:02 0 删除 编辑

mapping这部分的官方说明

Mapping是用来定义一个文档及其字段如何进行存储和索引的。 使用Mapping可以定义: String字段应视为full text还是keyword 字段设为数字、日期或地理位置类型 日期类型的值格式化 自定义规则以控制动态添加字段的映射

Mapping type

6.0以后每个索引都只有一个映射的Type,由这个type决定文档如何被索引。 一个Mapping type通常由两部分组成,Meta-fields和Fields or properties 元数据主要是_index, _type, _id, _source这四个字段 fields就是一组field(属性-值)

Field datatypes


就是一般类型、Json层次嵌套结构的类型和专门的类型 很多时候,由于不同目的会用不同的方式去对同一个字段创建索引。比如一个字符串存的text会被分词,如果不需要分词,应该存成keyword,而且数值类型如果不是要计算或者range而是像string一样查询,也应该存成keyword。keyword也可以用来sorting或者aggregations操作。

Settings to prevent mappings explosion

在索引中定义太多的字段会导致映射爆炸,这会导致内存不足错误和难以恢复的情况。这种问题很普遍,如果文档出现了新字段去建立索引,由于动态映射所以直接会被加进去。要是太多肯定有问题,说明里有解决方案,遇到这种问题的时候再说。

Dynamic mapping

字段和映射类型不需要在put之前定义。由于动态映射,就算只有一个文档有这个字段,新的字段名也会被自动添加。 新字段既可以添加到顶层映射类型,也可以添加到内部Object和nested嵌套字段中。 可以设置动态映射规则,定制用于新字段的映射。

Explicit mappings

显式映射,假如你知道更多你的数据结构什么样子,就不需要ES猜测然后去动态映射,所以一般新手不知道mapping如何构建,使用动态映射。 但是肯定是推荐指定你自己的显式映射 可以在创建索引前创建Mapping,并且可以使用PUT mapping API将字段添加到现有索引中。

一个mapping的例子

PUT my_index 
{
  "mappings": {
    "doc": { 
      "properties": { 
        "title":    { "type": "text"  }, 
        "name":     { "type": "text"  }, 
        "age":      { "type": "integer" },  
        "created":  {
          "type":   "date", 
          "format": "strict_date_optional_time||epoch_millis"
        }
      }
    }
  }
}

大概解释一下,索引名字是my_index,mapping type名字是doc,下面properties里面就是一堆字段,date类型还设置了格式

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3144778/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
管理员

注册时间:2018-03-30

  • 博文量
    2383
  • 访问量
    984403