首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Elasticsearch探索:数据类型强制匹配coerce使用

Elasticsearch探索:数据类型强制匹配coerce使用

作者头像
HLee
修改于 2021-01-28 08:04:49
修改于 2021-01-28 08:04:49
1.2K00
代码可运行
举报
文章被收录于专栏:房东的猫房东的猫
运行总次数:0
代码可运行

简介

官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/coerce.html#coerce

在实际的使用中,数据并不总是正确的。 根据产生方式的不同,数字可能会在 JSON 主体中呈现为真实的 JSON 数字,例如 5,但也可能呈现为字符串,例如 “5”。 或者将整数的数字呈现为浮点数,例如 5.0,甚至是 “5.0”。

coerce 尝试清除不匹配的数值以适配字段的数据类型。 例如:

  • 字符串将被强制转换为数字,比如 "5" 转换为整型数值5
  • 浮点将被截断为整数值,比如 5.0 转换为整型值5
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT my_index
{
  "mappings": {
    "properties": {
      "number_one": {
        "type": "integer"
      },
      "number_two": {
        "type": "integer",
        "coerce": false
      }
    }
  }
} 

PUT my_index/_doc/1
{
  "number_one": "10"
} 
PUT my_index/_doc/2
{
  "number_two": "10"
}

在上面的例子中,我们定义 number_one 为 integer 数据类型,但是它没有属性 coerce 为 false,那么当我们把 number_one 赋值为"10",也就是一个字符串,那么它自动将"10"转换为整型值10。针对第二字段 number_two,它同样被定义为证型值,但是它同时也设置 coerce 为 false,也就是说当字段的值不匹配的时候,就会出现错误。

运行上面的结果是:

  • number_one 字段将包含整数10。
  • 由于禁用了强制,因此该文档将被拒绝

Index 级默认设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT my_index
{
  "settings": {
    "index.mapping.coerce": false
  },
  "mappings": {
    "properties": {
      "number_one": {
        "type": "integer",
        "coerce": true
      },
      "number_two": {
        "type": "integer"
      }
    }
  }
} 
PUT my_index/_doc/1
{
  "number_one": "10"
}  
PUT my_index/_doc/2
{
  "number_two": "10"
} 

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验