elasticSearch7.x—mapping中的fields属性||copy_to配置(同一个字段两种类型)

elasticSearch允许一个字段有两种不同的类型,例如一个字段即可以为text类型,也可以为keyword类型。

1.方式一:mapping的fields属性

未创建索引时,直接插入文档,es会自动生成mapping关系。

POST test_fields/_doc
{
  "name":"li bai",
  "id":202112120202
}
elasticSearch7.x—mapping中的fields属性||copy_to配置(同一个字段两种类型)_第1张图片
image.png

即name字段即是text类型,name.keyword是keyword属性。我们可以直接去搜索name.keyword。


elasticSearch7.x—mapping中的fields属性||copy_to配置(同一个字段两种类型)_第2张图片
image.png

扩展:es的script脚本,对于text字段,官网推荐我们使用doc['first_name.keyword']获取值,其本质就是因为mapping中存在fields字段。

# id即是long类型,也是date类型
PUT test_fields
{
  "mappings": {
    "properties": {
      "name":{
        "type":"text",
        "fields": {
          "rz":{
            "type":"keyword"
          }
        }
      },
      "id":{
        "type": "long",
        "fields": {
          "time":{
            "type":"date",
            "format":"yyyyMMddhhmmss"
          }
        }
      }
    }
  }
}


POST test_fields/_doc
{
  "name":"li bai",
  "id":20211012020200
}


GET test_fields/_search

使用date类型进行搜索时:

elasticSearch7.x—mapping中的fields属性||copy_to配置(同一个字段两种类型)_第3张图片
使用date类型进行搜索时.png

当然,搜索的_source字段只会存在id和name两个属性。

elasticSearch7.x—mapping中的fields属性||copy_to配置(同一个字段两种类型)_第4张图片
image.png

2. 方式二:copy_to配置

当然,创建mapping的时候,copy_to是将多个字段的值,合并到一个字段中,便于搜索。但是也可以实现一个字段存在多个类型的需求。

创建索引:

PUT test_fields
{
  "mappings": {
    "properties": {
      "name":{
        "type":"text",
        "fields": {
          "rz":{
            "type":"keyword"
          }
        }
      },
      "id":{
        "type": "long",
        "copy_to": "r_time"
      },
      "r_time":{
        "type":"date",
        "format": "yyyyMMddhhmmss"
      }
   }
  }
}

填充数据:

POST test_fields/_doc
{
  "name":"li bai",
  "id":20211012020200
}
elasticSearch7.x—mapping中的fields属性||copy_to配置(同一个字段两种类型)_第5张图片
image.png

在_source中也不会体现,但是可以进行搜索。

elasticSearch7.x—mapping中的fields属性||copy_to配置(同一个字段两种类型)_第6张图片
搜索.png

可以看到,在插入数据的时候并未插入r_time字段。它是将id字段(long类型)填充到了r_time字段中,并转化为了date类型。

你可能感兴趣的:(elasticSearch7.x—mapping中的fields属性||copy_to配置(同一个字段两种类型))