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
}
}