ES设置常规数据字段属性

2023-11-13

index-是否可被搜索

示例如下:

PUT es-0001
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword",
        "index": false
      }
    }
  }
}

POST es-0001/_doc
{
  "name":"James"
}


GET es-0001/_search
{
  "query": {
    "term": {
      "name": {
        "value": "kevin"
      }
    }
  }
}

{
  "error" : {
    "root_cause" : [
      {
        "type" : "query_shard_exception",
        "reason" : "failed to create query: Cannot search on field [name] since it is not indexed.",
        "index_uuid" : "ps0-ZgOfTuaGYxiAtvGFWQ",
        "index" : "es-0001"
      }
    ],
    "type" : "search_phase_execution_exception",
    "reason" : "all shards failed",
    "phase" : "query",
    "grouped" : true,
    "failed_shards" : [
      {
        "shard" : 0,
        "index" : "es-0001",
        "node" : "88kvwMVmTnCb3vUjGWhc-A",
        "reason" : {
          "type" : "query_shard_exception",
          "reason" : "failed to create query: Cannot search on field [name] since it is not indexed.",
          "index_uuid" : "ps0-ZgOfTuaGYxiAtvGFWQ",
          "index" : "es-0001",
          "caused_by" : {
            "type" : "illegal_argument_exception",
            "reason" : "Cannot search on field [name] since it is not indexed."
          }
        }
      }
    ]
  },
  "status" : 400
}

store-是否被存储

概念:默认原始数据存储在_source里,也可以在Lucene里面存储一份,通过此关键词空置取值范围,true/false,默认false不存储。

PUT es-0001
{
  "mappings": {
    "_source": {
      "enabled": false
    }, 
    "properties": {
      "name": {
        "type": "keyword",
        "index": false,
        "store": false
      }
    }
  }
}

POST es-0001/_doc
{
  "name":"James"
}
GET es-0001/_search
{
  "stored_fields": ["name"]
}
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "es-0001",
        "_type" : "_doc",
        "_id" : "vwcnHX4BNbkwptbUE98B",
        "_score" : 1.0,
        "fields" : {
          "name" : [
            "James"
          ]
        }
      },
      {
        "_index" : "es-0001",
        "_type" : "_doc",
        "_id" : "wgcnHX4BNbkwptbUFN_3",
        "_score" : 1.0,
        "fields" : {
          "name" : [
            "James"
          ]
        }
      }
    ]
  }
}

enabled-启用

概念:
设置字段是否需要被检索,类似index属性,用于对未知object类型的设置,取值范围true/false,不仅禁用了索引,还禁用了mapping结构。
应用领域:
部分应用领域,一些数据仅仅需要数据字段,不需要被检索与创建索引,一般用于对于object类型的设置,避免设置太多


PUT es-0001
{
  "mappings": {
    "_source": {
      "enabled": false
    }, 
    "properties": {
      "address": {
        "type": "object",
        "enabled": "false"
      }
    }
  }
}

POST es-0001/_doc
{
  "name":"James",
  "address":{
    "province":"Shaanxi",
    "city":"xi'an"
  }
}
POST es-0001/_doc
{
  "name":"Kevin",
  "address":{
    "province":"Sichuan",
    "city":"zhengzhou"
  }
}

GET es-0001

GET es-0001的结果,可以看到address的type是object。并不会展示详细的信息

{
  "es-0001" : {
    "aliases" : { },
    "mappings" : {
      "_source" : {
        "enabled" : false
      },
      "properties" : {
        "address" : {
          "type" : "object",
          "enabled" : false
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "es-0001",
        "creation_date" : "1641167231118",
        "number_of_replicas" : "1",
        "uuid" : "GhfpWtBHR_GWFOsspLZ4Jw",
        "version" : {
          "created" : "7110199"
        }
      }
    }
  }
}

doc_value-聚合排序

概念解释:
列式数据存储,ES数据存储原始数据一份,列式数据一份,默认有2份数据。
应用:
基于该字段做聚合分析
基于该字段做排序

PUT es-0001
{
  "mappings": {
    "_source": {
      "enabled": false
    }, 
    "properties": {
      "name":{
        "type": "keyword",
        "doc_values": false
      },
      "address": {
        "type": "object",
        "enabled": "true"
      }
    }
  }
}

POST es-0001/_doc
{
  "name":"James1",
  "address":{
    "province":"Shaanxi",
    "city":"xi'an"
  }
}
POST es-0001/_doc
{
  "name":"James2",
  "address":{
    "province":"Sichuan",
    "city":"zhengzhou"
  }
}
GET es-0001/_search
{
  "sort": [
    {
      "name": {
        "order": "desc"
      }
    }
  ]
}
{
  "error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "Can't load fielddata on [name] because fielddata is unsupported on fields of type [keyword]. Use doc values instead."
      }
    ],
    "type" : "search_phase_execution_exception",
    "reason" : "all shards failed",
    "phase" : "query",
    "grouped" : true,
    "failed_shards" : [
      {
        "shard" : 0,
        "index" : "es-0001",
        "node" : "kO50LN6pQVii_yQG2W94zQ",
        "reason" : {
          "type" : "illegal_argument_exception",
          "reason" : "Can't load fielddata on [name] because fielddata is unsupported on fields of type [keyword]. Use doc values instead."
        }
      }
    ],
    "caused_by" : {
      "type" : "illegal_argument_exception",
      "reason" : "Can't load fielddata on [name] because fielddata is unsupported on fields of type [keyword]. Use doc values instead.",
      "caused_by" : {
        "type" : "illegal_argument_exception",
        "reason" : "Can't load fielddata on [name] because fielddata is unsupported on fields of type [keyword]. Use doc values instead."
      }
    }
  },
  "status" : 400
}

null-value-空置默认值

概念介绍:
ES允许可以不设置字段,没有数据库的必填选型;与数据库的默认值有区别,ES并不会存储这个值,也就是_source中不存储,仅仅用来索引检索
应用:
程序性能提示
避免程序数据异常错误

DELETE es-0001


PUT es-0001
{
  "mappings": {
    "_source": {
      "enabled": true
    }, 
    "properties": {
      "name":{
        "type": "keyword",
        "doc_values": true, 
        "null_value": "default"
      },
      "address": {
        "type": "object",
        "enabled": "true"
      }
    }
  }
}

POST es-0001/_doc
{
  "name":"kevin",
  "address":{
    "province":"Shaanxi",
    "city":"xi'an"
  }
}
POST es-0001/_doc
{
  "name":null,
  "address":{
    "province":"Sichuan",
    "city":"zhengzhou"
  }
}

POST es-0001/_doc
{
  "name":"James3",
  "address":{
    "province":"Sichuan",
    "city":"zhengzhou"
  }
}

GET es-0001


GET es-0001/_search
{
  "sort": [
    {
      "name": {
        "order": "desc"
      }
    }
  ]
}

GET es-0001/_search

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "es-0001",
        "_type" : "_doc",
        "_id" : "EQdbHX4BNbkwptbUXuKU",
        "_score" : null,
        "_source" : {
          "name" : "kevin",
          "address" : {
            "province" : "Shaanxi",
            "city" : "xi'an"
          }
        },
        "sort" : [
          "kevin"
        ]
      },
      {
        "_index" : "es-0001",
        "_type" : "_doc",
        "_id" : "EwdbHX4BNbkwptbUaOLC",
        "_score" : null,
        "_source" : {
          "name" : null,
          "address" : {
            "province" : "Sichuan",
            "city" : "zhengzhou"
          }
        },
        "sort" : [
          "default"
        ]
      },
      {
        "_index" : "es-0001",
        "_type" : "_doc",
        "_id" : "FAdbHX4BNbkwptbUcOLE",
        "_score" : null,
        "_source" : {
          "name" : "James3",
          "address" : {
            "province" : "Sichuan",
            "city" : "zhengzhou"
          }
        },
        "sort" : [
          "James3"
        ]
      }
    ]
  }
}

可以看到第二条数据的排序是default值,也就是null_value设置的值,感觉这个属性意义不大。

dynamic-自动扩充

概念解释:是否允许对象下面的属性自由扩展。可选值有true/false/strict/runtime,默认true。
应用:严格限制子对象下面的字段行为


PUT es-0001
{
  "mappings": {
    "_source": {
      "enabled": true
    },
    "properties": {
      "name": {
        "type": "keyword",
        "doc_values": true,
        "null_value": "default"
      },
      "address": {
        "dynamic": "strict",
        "properties": {
          "province": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

POST es-0001/_doc
{
  "name":"kevin",
  "address":{
    "province":"Shaanxi",
    "city":"xi'an"
  }
}

当设置为strict之后,不能进行任意扩展。结果如下。

{
  "error" : {
    "root_cause" : [
      {
        "type" : "strict_dynamic_mapping_exception",
        "reason" : "mapping set to strict, dynamic introduction of [city] within [address] is not allowed"
      }
    ],
    "type" : "strict_dynamic_mapping_exception",
    "reason" : "mapping set to strict, dynamic introduction of [city] within [address] is not allowed"
  },
  "status" : 400
}

ignore_above-超长忽略检索

概念解释:keyword类型下,字符过于长,检索意义不大,索引会被禁用,数据不可被检索
应用领域:基于keyword类型检索应用,超过限定长度就无需检索

PUT es-0001
{
  "mappings": {
    "_source": {
      "enabled": true
    },
    "properties": {
      "name": {
        "type": "keyword",
        "ignore_above": "5"
      },
      "address": {
        "properties": {
          "province": {
            "type": "keyword"
          }
        }
      }
    }
  }
}
POST es-0001/_doc
{
  "name":"Kevinwu",
  "address":{
    "province":"Shaanxi",
    "city":"xi'an"
  }
}

GET es-0001/_search
{
  "query": {
    "term": {
      "name": {
        "value": "KevinWu"
      }
    }
  }
}

超过5位的就无法被ES检索到了。

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

fields-多字段属性

概念解释:多字段属性
应用领域:同一个数据字段,需要同时满足多种业务需要.


PUT es-0001
{
  "mappings": {
    "_source": {
      "enabled": true
    },
    "properties": {
      "name": {
        "type": "keyword",
        "ignore_above": "500"
      },
      "age": {
        "type": "keyword", 
        "fields": {
          "age_alias": {
            "type": "integer"
          }
        }
      }
    }
  }
}

POST es-0001/_doc
{
  "name":"Kevinwu",
  "age":"20"
}

GET es-0001/_search
{
  "query": {
    "range": {
      "age.age_alias": {
        "gte": 5,
        "lte": 90
      }
    }
  }
}

在搜索的时候,可以根据age=“20” 字符串进行搜索,也可以用age.age_alias进行范围搜索。

coerce-限制类型

PUT es-0001
{
  "mappings": {
    "_source": {
      "enabled": true
    },
    "properties": {
      "name": {
        "type": "keyword",
        "ignore_above": "500"
      },
      "age": {
        "type": "integer", 
        "coerce": false
      }
    }
  }
}

POST es-0001/_doc
{
  "name":"Kevinwu",
  "age":"20"
}

限制了类型后,integer类型的插入字符类型20后,就提示无法插入。

{
  "error" : {
    "root_cause" : [
      {
        "type" : "mapper_parsing_exception",
        "reason" : "failed to parse field [age] of type [integer] in document with id '2Qf8H34BNbkwptbUx_4l'. Preview of field's value: '20'"
      }
    ],
    "type" : "mapper_parsing_exception",
    "reason" : "failed to parse field [age] of type [integer] in document with id '2Qf8H34BNbkwptbUx_4l'. Preview of field's value: '20'",
    "caused_by" : {
      "type" : "illegal_argument_exception",
      "reason" : "Integer value passed as String"
    }
  },
  "status" : 400
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES设置常规数据字段属性 的相关文章

随机推荐

  • spring 使用 jdbcTemplate 查询 MySQL中 timestamp类型数据不准确的问题

    原因 可能是时区设置问题 解决方法 在数据库连接的url中加上时区的设置 如果使用 springboot 在 application properties 文件中添加 spring datasource url jdbc mysql loc
  • 名称解释:Deployment

    简述 Deployment为Pod和ReplicaSet提供了一个声明式定义 declarative 方法 用来替代以前的ReplicationController来方便的管理应用 典型的应用场景包括 定义Deployment来创建Pod和
  • selenium常用定位元素属性详解

    selenium定位元素详解 1 CSS定位表达式 2 XPath定位表达式 3 XPath定位与CSS定位的比较 4 使用ID定位 5 使用class名称定位 1 CSS定位表达式 css 是一种用于发现HTML或XML等文件样式的前端页
  • Jmeter接口测试、性能测试详细讲解+实战教程,堪称经典!

    目录 导读 1 接口简介 2 接口测试简介 3 环境搭建 4 RESTful风格 5 Json说明 6 Jmeter简介 7 Jmeter环境搭建 8 Jmeter使用 8 1 Jmeter发GET请求 8 2线程组 8 2 1 并发执行
  • BIO、NIO和AIO的区别、三种IO的原理与用法

    目录 IO BIO NIO AIO 区别及联系 各自适用场景 使用方式 IO 什么是IO 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口 它对于任何计算机系统都非常关键 因而所有 I O 的主体实际上是内置在操作系统中的
  • 【信号与系统】零输入响应和自由响应的区别

    课本内容 以下内容来自郑君里 信号与系统 第三版 上册 p61 1 自由响应和零输入响应都满足齐次方程的解 2 然而 它们的系数完全不同 零输入响应的系数仅由起始储能情况决定 而自由响应的系数要同时依从于起始状态和激励信号 3 自由响应由两
  • 战地一的服务器在哪个文件夹,战地1怎么加入服务器 战地1加入服务器方法

    今天小编给大家带来的是一位玩家分享的 战地1 加入服务器方法介绍 不知道怎么加入的玩家 快跟小编一起来看看吧 战地1的网络对战除去行动模式是自动配对或者跟好友进外 其他对战进入服务器的方式有好多种 我估计还有其他玩家不知道 那我就图文指条明
  • 【JavaScript】Math 对象

    Math 对象 Math 对象是 JS 的内置对象 可以直接使用 console log typeof Math Math object Math abs acos 常用属性 Math PI 圆周率 3 141592653589793 常用
  • ScrollView嵌套RecyclerView滑动冲突相关问题

    出现了滑动冲突问题 主要表现为横向RecyclerView滑动不灵敏 纵向RecyclerView滑动卡顿 scrollview里面放Recyclerview 会导致view不回收 内存压力大 最好使用 Recyclerview通过Item
  • 带过渡动画的折叠收缩布局ExpandLayout

    ExpandLayout 简介 由于界面View VISIBLE和View GONE的动画太生硬 所以写了ExpandLayout类来平滑过渡 基本思路 动态的设置布局的高度 核心动画效果代码 切换动画实现 private void ani
  • Android面试题——javaMVC、AndroidMVC

    中的 模型 对象 是应用程序的主体部分 多有业务逻辑都应该放到该层 视图 对象 是应用程序中负责生成用户界面的部分 也是整个 架构中用户唯一可以看到的一层 接受用户的输入 显示处理结果 3 控制器 controller 对象 是根据用户的输
  • python3代码提示怎么设置-PyCharm里面配置第三方库的代码自动提示

    最近开始用 PyCharm 编辑器来编写 python 代码了 安装了 GUI 库 wxPython 之后 发现没有代码提示 写起来很是不爽 几经周折之后发现还是得配置一下 因为自己也找了蛮久 所以记录一下 希望可以帮到打击 其他第三方库的
  • 微信小程序纯css实现刻度尺

    微信小程序纯css实现刻度尺 最近需要实现一个高度定制的刻度尺 但是网上现成的方案却是极少 最终找到了HaoTian的wx scale 但是没有实现竖向的效果而且刻度范围大时 在安卓机上无法渲染完全 找了很久没有找到原因 猜测是canvas
  • 为什么c语言有时候要两个括号,头文件中为什么要用了两个括号?

    在研究MD5算法 发现它的头文件MD5 h有 MD5 context typedef struct UINT4 state 4 state ABCD UINT4 count 2 number of bits modulo 2 64 lsb
  • cisco配置WEB登录的方法

    要启用路由器的 HTTP HTTPS 服务器 请使用下列 Cisco IOS 命令 Router config ip http server Router config ip http secure server Router config
  • 不走弯路,ubuntu系统GPU版本的Pytorch安装

    需先查看电脑是否安装了显卡驱动 nvidia smi 有表格样页面输出则安装了 如果没有 sudo ubuntu drivers devices 查看可安装版本 选择最高安装 sudo apt install nvidia driver 5
  • 用Python爬取了上W表情包。快拿去欢乐斗图吧~

    导语 表情包 是一种利用图片来表示感情的一种方式 表情包是在社交软件活跃之后 形成的一种流行文化 表情包流行于互联网上面 基本人人都会发表情 曾经你是否也有过找不到表情包去应对别人的时候 别担心 今天小编将分享如何用Python爬取批量表情
  • 【核磁共振成像】单射成像和高速脉冲序列

    目录 一 提高成像速度的手段 二 平面回波成像 EPI 序列 三 常用或基本EPI序列 四 EPI变型序列 五 渐开平面螺旋 spiral 扫描序列 六 RARE序列 七 GRASE序列 八 STEAM序列 一 提高成像速度的手段 MRI扫
  • Docker容器安装Mysql和Redis(3)

    前言 容器安装的好处是 相互隔离互不影响 相比于传统的一个linux下安装多个服务 其中一个服务报错可能影响其他服务的问题 现在一个服务就是一个容器互不影响 目录 1 安装MySQL 1 1 拉取镜像 1 2 创建并启动 1 3 外部创建映
  • ES设置常规数据字段属性

    index 是否可被搜索 示例如下 PUT es 0001 mappings properties name type keyword index false POST es 0001 doc name James GET es 0001