1 什么是映射
映射(mapping)就像数据库中的 Schema ,描述了文档可能具有的字段或属性、每个字段的
 数据类型,比如 Text,Keyword,Integer 或 Date ,以及 Lucene 是如何索引和存储这些字
 段的。
Elasticsearch 支持如下简单字段类型:
 (1) 字符串: text,keyword
 (2)整数:byte,short,integer,long
 (3)浮点数: float,double
 (4) 布尔型: boolean
 (5) 日期: date
当你索引一个包含新字段的文档之前【未自动配置映射关系时】,Elasticsearch通过JSON 中基本数据类型,尝试猜测字段类型,自动的加入到映射中。这是Elasticsearch中的动态索引,使用如下规则去映射文档字段。
| JSON data type | Elasticsearchdata type | 
|---|---|
| null | 不添加 | 
| true 或 false | boolean 类型 | 
| 带小数的数字,如 1.1 | float 类型 | 
| 整数,如 3 | long 类型 | 
| 字符串 | 如果配置了自动识别且通过了自动识别 会根据字符串的实际值去动态转换成Elasticsearch的数据类型。如 ‘2023-10-12’ date类型 ‘1.45’ float类型 ‘120’ long 类型 未配置自动识别,使用text 或者keyword类型 | 
对于 JSON 中的字符串字段,我们可以通过配置 date_detection: true 和 numeric_detection:
true 尝试将它们转化成数值类型或时间类型,date_detection 默认为 true,numeric_detecti
on 默认为 false
2 查询映射
准备3条数据
 Post http://localhost:9200/users/_create/1
 Post http://localhost:9200/users/_create/2
 Post http://localhost:9200/users/_create/3
 请求的JSON参数如下
{
    "name":"张三",
    "sex":"male",
    "tel":85621
}
{
    "name":"晓明",
    "sex":"male",
    "tel":17885150125
}
{
    "name":"萧红",
    "sex":"female",
    "tel":89457
}
 
根据上述内容可知,Elasticsearch会在未定义索引的情形去检索JSON的数据类型自动去映射成为Elasticsearch中的数据类型。可以发送Get请求去查询映射关系
  
     
      
       
        
        
          h 
         
        
          t 
         
        
          t 
         
        
          p 
         
        
          : 
         
        
          / 
         
        
          / 
         
        
          l 
         
        
          o 
         
        
          c 
         
        
          a 
         
        
          l 
         
        
          h 
         
        
          o 
         
        
          s 
         
        
          t 
         
        
          : 
         
        
          9200 
         
        
          / 
         
        
          u 
         
        
          s 
         
        
          e 
         
        
          r 
         
        
          s 
         
         
         
           / 
          
         
           m 
          
         
        
          a 
         
        
          p 
         
        
          p 
         
        
          i 
         
        
          n 
         
        
          g 
         
        
       
      
        \textcolor{red}{http://localhost:9200/users/_mapping} 
       
      
    http://localhost:9200/users/mapping _mapping 映射操作
 
3自定义映射关系
尽管在很多情况下基本字段数据类型已经够用,但你经常需要为单独字段自定义映射,特别是
 字符串字段。自定义映射允许你执行下面的操作:
 (1) 全文字符串字段和精确值字符串字段的区别
 (2) 使用特定语言分析器
 (3)优化字段以适应部分匹配
 (4) 指定自定义数据格式
可以发送Put请求去自定义设置映射关系 h t t p : / / l o c a l h o s t : 9200 / u s e r 2 / m a p p i n g \textcolor{red}{http://localhost:9200/user2/_mapping} http://localhost:9200/user2/mapping
{
	"properties": {
        //允许的字段 name 
		"name": {
             // 类型为text,可分词查询
			"type": "text",
            //当前字段允许创建索引
			"index": true
		},
		"sex": {
            // 类型为keyword,不可分词查询
			"type": "keyword",
			"index": true
		},
        "tel": {
			"type": "keyword",
            //禁用索引 默认情况下,Elasticsearch 文档每个字段都会被索引。如果某些字段不需要支持查询,可以在映射中配置 "index": false ,减少存储空间占用,并且提升写入速度
			"index": false
		}
	}
}
 
值得注意的是,已有字段映射已存在的时候,不允许进行修改,比如说从long类型修改成为keyword类型,只能添加新字段
所以自定义创建映射时,选在user2 索引下创建。



















