美文网首页
elasticSearch7.x—mapping中的fields

elasticSearch7.x—mapping中的fields

作者: 小胖学编程 | 来源:发表于2021-05-20 11:56 被阅读0次

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

1.方式一:mapping的fields属性

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

POST test_fields/_doc
{
  "name":"li bai",
  "id":202112120202
}
image.png

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


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类型进行搜索时:

使用date类型进行搜索时.png

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

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
}
image.png

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

搜索.png

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

相关文章

网友评论

      本文标题:elasticSearch7.x—mapping中的fields

      本文链接:https://www.haomeiwen.com/subject/mjevjltx.html