← Back to list

4.ES基本操作-映射

Published on: | Views: 99

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

文档(Document): 一组字段的集合。 字段(Fields):用来存放数据的基本单位,有不同的数据类型。 映射(Mapping) :定义文档及其包含的字段如何存储和索引的过程。

动态映射 在实验阶段可以使用动态映射,在创建文档时es会自动创建映射,但在生产环境有时候并不是最佳方案。

显示映射 手动创建映射

在索引中定义太多的字段,会导致内存溢出。

映射管理

1.查看

GET /$INDEX_NAME/_mapping

2.添加

POST /$INDEX_NAME/_mapping 
{
    "properties": {
        "tag": {
            "type": "keyword"
        }
    }
}

数据类型

keyword类型

keyword, 字符串类型,用于不需要切分的内容,比如id,email等。

text类型

text, 字符串类型,用于需要切分的内容,比如商品标题、描述等。

数值类型

long, integer, short, byte, double, float, half_float, scaled_float, unsigned_long 为了节省空间和提高索引效率,应当根据实际需求选择合适的数据类型。

布尔类型

boolean, true or false

日期类型

date, 日期类型的默认格式为strict_date_optional_time或者epoch_millis; strict_date_optional_time的含义是严格的时间类型:yyyy-MM-dd、yyyyMMdd、yyyyMMddHHmmss、yyyy-MM-ddTHH:mm:ss、yyyy-MM-ddTHH:mm:ss.SSS和yyyy-MM-ddTHH:mm:ss.SSSZ等; epoch_millis的含义是从1970年1月1日0点到现在的毫秒数。 可以在mapping中指定格式,例如:

PUT /user/_mapping 
{
  "properties":{
    "birthyday":{
      "type":"date",
      "format":"yyyy-MM-dd HH:mm:ss"
    }
  }
}

数组类型

直接传入数组就可以了,例如

PUT /user/_mapping 
{
  "properties":{
    "interest":{
      "type":"keyword"
    }
  }
}

PUT /user/_doc/0001
{
  "userName":"mods",
  "interest":["小说","游戏","上班"],
  "age":25,
  "birthyday":"1998-01-01 00:00:00"
}

对象类型

直接传入对象,不需要定义

PUT /user/_doc/0001
{
  "car":{
    "board":"mg",
    "power":"oil"
  }
}

地理类型

geo_point, 包含两个属性lat(纬度)和lon(经度)

PUT /user/_mapping 
{
  "properties":{
    ...
    "position":{
      "type":"geo_point"
    }
  }
}

PUT /user/_doc/0001
{
   ....
  "position":{
    "lat":34,
    "lon":110
  }
}