Elasticsearch Mapping索引映射

Mapping 可以:

  • 定义 Index 下的字段名(Field Name)
  • 定义字段的类型,比如数值型、字符型、布尔型
  • 定义倒排索引相关的配置,比如是否索引、记录position等
GET kibana_sample_data_flights
{
  "kibana_sample_data_flights" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "AvgTicketPrice" : {
          "type" : "float"
        },
        "Cancelled" : {
          "type" : "boolean"
        },
        "Carrier" : {
          "type" : "keyword"
        },
        "Dest" : {
          "type" : "keyword"
        },
        "DestAirportID" : {
          "type" : "keyword"
        },
        "DestCityName" : {
          "type" : "keyword"
        },
        ...
      }
    },
    "settings" : {
      "index" : {
        "number_of_shards" : "1",
        "auto_expand_replicas" : "0-1",
        "provided_name" : "kibana_sample_data_flights",
        "creation_date" : "1574647860171",
        "number_of_replicas" : "0",
        "uuid" : "AagbcCRyTKSJepOGo1_DKQ",
        "version" : {
          "created" : "7040299"
        }
      }
    }
  }
}

类型的自动识别

动态映射 Dynamic Mapping

JSON datatype Elasticsearch datatype
空值 null 没有字段添加
布尔值 true or false boolean
整数 long
对象 object
数组 由第一个非空数值的类型所决定
字符串 - 匹配日期格式,设置为 Date
- 匹配数字设置为 double或long字段,该选县默认关系
- 设置为Text,并且增加 keyword 子字段
浮点数 float

数字用引号,默认当 text;日期格式会推到成 Date;有些类型会推导错误,比如日期类型。

#写入文档,查看 Mapping
PUT mapping_test/_doc/1
{
  "firstName":"Chan",
  "lastName": "Jackie",
  "loginDate":"2018-07-24T10:29:48.103Z"
}

#查看 Mapping文件
GET mapping_test/_mapping


#Delete index
DELETE mapping_test

#dynamic mapping,推断字段的类型
PUT mapping_test/_doc/1
{
    "uid" : "123",
    "isVip" : false,
    "isAdmin": "true",
    "age":19,
    "heigh":180
}

#查看 Dynamic
GET mapping_test/_mapping


#默认Mapping支持dynamic,写入的文档中加入新的字段
PUT dynamic_mapping_test/_doc/1
{
  "newField":"someValue"
}

如何显示定义 Mapping

静态映射(自定义映射)

#设置 index 为 false
DELETE users
PUT users
{
    "mappings" : {
      "properties" : {
        "firstName" : {
          "type" : "text"
        },
        "lastName" : {
          "type" : "text"
        },
        "mobile" : {
          "type" : "text",
          "index": false   控制当前字段是否被索引,默认为true,为false表示该字段不可被搜索
        }
      }
    }
}

PUT users/_doc/1
{
  "firstName":"Ruan",
  "lastName": "Yiming",
  "mobile": "12345678"
}


POST /users/_search
{
  "query": {
    "match": {
      "mobile":"12345678"
    }
  }
}

#设定Null_value
- 需要对 Null 值实现搜索
- 只有 Keyword 类型支持设定 null_value

DELETE users
PUT users
{
    "mappings" : {
      "properties" : {
        "firstName" : {
          "type" : "text"
        },
        "lastName" : {
          "type" : "text"
        },
        "mobile" : {
          "type" : "keyword",
          "null_value": "NULL"
        }


      }
    }
}

PUT users/_doc/1
{
  "firstName":"Ruan",
  "lastName": "Yiming",
  "mobile": null
}

PUT users/_doc/2
{
  "firstName":"Ruan2",
  "lastName": "Yiming2"
}

GET users/_search
{
  "query": {
    "match": {
      "mobile":"NULL"
    }
  }
}

# 设置 Copy to
- _all 在 7 中被 copy_to 所代替
- 满足一些特定的搜索需求
- copy_to 将字段的数值拷贝到目标字段,实现类似 _all 的作用
- copy_to 的目标字段不出现在 _source 中

DELETE users
PUT users
{
  "mappings": {
    "properties": {
      "firstName":{
        "type": "text",
        "copy_to": "fullName"
      },
      "lastName":{
        "type": "text",
        "copy_to": "fullName"
      }
    }
  }
}
PUT users/_doc/1
{
  "firstName":"Ruan",
  "lastName": "Yiming"
}

使用 copy_to 之后就可以用 fullName 进行查询
GET users/_search?q=fullName:(Ruan Yiming)

POST users/_search
{
  "query": {
    "match": {
       "fullName":{
        "query": "Ruan Yiming",
        "operator": "and"
      }
    }
  }
}

# 数组类型
Elasticsearch 中不提供专门的数组类型。但是任何字段,都可以包含多个相同类型的数值

PUT users/_doc/1
{
  "name":"onebird",
  "interests":"reading"
}

PUT users/_doc/1
{
  "name":"twobirds",
  "interests":["reading","music"]
}

POST users/_search
{
  "query": {
    "match_all": {}
  }
}

GET users/_mapping

类型及范围说明

下面这些表格摘自《从Lucene到Elasticsearch》

Elasticsearch字段类型
数字类型及其取值范围
Elasticsearch地理形状说明
range类型及其取值范围
Elasticsearch元字段分类

相关文章

Mapping Params

Elasticsearch 技术分析(二): 索引映射Mapping问题

发布了190 篇原创文章 · 获赞 17 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/shuiCSDN/article/details/104052448