es脚本(script)的简单使用

这篇具有很好参考价值的文章主要介绍了es脚本(script)的简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

es脚本(script)的简单使用

前言

最近工作需要,要求对es中的数据进行简单统计,根据笔者翻阅资料,需要用到script脚本。现有一个products索引,以其为例,数据类型映射和内容示例如下

//数据结构mapping
{
  "products" : {
    "mappings" : {
      "properties" : {
        "id" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "num" : {
          "type" : "long"
        },
        "type" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}


//数据示例
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 100,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "1d47cd3b9a444ae99763f7f84b954f85",
        "_score" : 1.0,
        "_source" : {
          "id" : "1d47cd3b9a444ae99763f7f84b954f85",	//id为简单的去掉-的UUID
          "name" : "商品0",	//商品名称
          "num" : 2,	//商品数量
          "type" : "1"	//商品类型,有“1”“2”“3”“4”共四种
        }
      }
    ]
  }
}

需求说明

对其中的内容进行简单统计:首先根据type进行分组,接着统计不同type中商品数量大于等于10和小于10的商品的数量

DSL

GET products/_search
{
  "size": 0,
  "aggs": {	//第一层聚合,用于对type进行分组
    "typeCount": {
      "terms": {
        "field": "type.keyword",	//type是text类型,不可以用于聚合,根据上面的mapping,它的keyword属性的类型是keyword,可以聚合
        "size": 100
      },
      "aggs": {	//第二层聚合,用于将之前聚合结果中的每一个桶(分组)中大于等于10和小于10的区分开
        "t1": {
          "terms": {
            "script": {	//这里使用脚本,内部除了source以外,可以增加一个属性lang,默认是painless
            "source": """	//多行的script用一对三个双引号包裹起来,单行的直接用一对单个双引号即可
              if(doc['num'].value >= 10) {	//注意num是long类型,所以可以直接用,如果是字符串,需要是keyword类型
                return '大于等于10'	//return的语句得到的结果会作为分组后的key
              }
              return '小于10'
            """
        }
          }
        }
      }
    }
  }
}

结果如下:文章来源地址https://www.toymoban.com/news/detail-508725.html

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 100,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "typeCount" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "4",
          "doc_count" : 31,
          "t1" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "大于等于10",
                "doc_count" : 17
              },
              {
                "key" : "小于10",
                "doc_count" : 14
              }
            ]
          }
        },
        {
          "key" : "2",
          "doc_count" : 24,
          "t1" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "小于10",
                "doc_count" : 13
              },
              {
                "key" : "大于等于10",
                "doc_count" : 11
              }
            ]
          }
        },
        {
          "key" : "1",
          "doc_count" : 23,
          "t1" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "小于10",
                "doc_count" : 14
              },
              {
                "key" : "大于等于10",
                "doc_count" : 9
              }
            ]
          }
        },
        {
          "key" : "3",
          "doc_count" : 22,
          "t1" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "大于等于10",
                "doc_count" : 18
              },
              {
                "key" : "小于10",
                "doc_count" : 4
              }
            ]
          }
        }
      ]
    }
  }
}

到了这里,关于es脚本(script)的简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • gem5学习(13):使用默认配置脚本——Using the default configuration scripts

    目录 一、A tour of the directory structure 1、boot/ 2、common/ 3、dram/ 4、example/ 5、learning_gem5/ 6、network/ 7、nvm/ 8、ruby/ 9、splash2/ 10、topologies/ 二、Using se.py and fs.py 三、Some common options se.py and fs.py 在这个教程中,将探讨如何使用gem5附带的默认配置脚本。 gem5附带了许多配置脚本,使

    2024年01月16日
    浏览(50)
  • 最新版本 Stable Diffusion 开源 AI 绘画工具之文本转换(Embedding)以及脚本(Script)高级使用篇

    这个功能其实就是将你常用的提示词打包成一个,你在写 prompt 的时候,只要输入这个,就可以实现特定的各种预设好的画风、画质或者其他相关的特征。 在之前的版本中,这个功能也被叫做文本嵌入 (Embedding) 我们可以在模型网站上找到很多别人已经打包好的

    2024年02月07日
    浏览(58)
  • Vue3 项目中使用setup()函数报错,script setup cannot contain ES module exports

    当使用vue3+vite使用语法糖setup时,要注意写法. 第一种写法就是 script 标签里面配置 setup,另一种是:export default 类里配置 setup() 方法, 我们只需要使用一种方法即可,混用了就会报错了。 解决: 第一种 script setup import {ref} from \\\'vue\\\' import { Toast } from \\\'vant\\\'; import Index from \\\'../pag

    2023年04月08日
    浏览(45)
  • 软件测试——Postman Script脚本功能

    Postman作为软件测试里一款非常流行的调试工具,给我们提供了一个执行JavaScript脚本的环境,所以我们可以使用js语言编写脚本来解决一些接口自动化的问题,比如接口依赖、接口断言等等。Postman有Pre-RequestScript和Tests两个编写js脚本的模块,支持以嵌入脚本的方式动态准备测

    2024年03月23日
    浏览(45)
  • 【Elasticsearch】es脚本编程使用详解

    目录 一、es脚本语言介绍 1.1 什么是es脚本 1.2 es脚本支持的语言 1.3 es脚本语言特点

    2024年02月08日
    浏览(42)
  • 【前端面试专栏】<script> 脚本以及 <link> 标签对 DOM 的影响

    🐱 个人主页: 不叫猫先生 ,公众号: 前端舵手 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏: vue3+vite+typeScript从入门到实践 📢 资料领取:前端进阶资料

    2024年02月12日
    浏览(41)
  • Postman进阶(一):编写预请求脚本(pre-request scripts)

    1.点击集合中的任意一个接口 2.点击Pre-request Script,即可在此下方编写脚本 3.点击send,Pre-request Script下的代码将在Postman将请求发送到API之前执行 Postman中提供一些选项,点击一下,则会在Pre-request Script中生成对应的脚本,可根据自己的需求来编写脚本 点击集合中的任意一个接

    2024年01月25日
    浏览(48)
  • 【前端工程化】配置package.json中scripts命令脚本,新手必学

    每日鸡汤:你总要努力追上那个曾经被赋予众望的自己吧 目录 前言 一、运行npm run 命令之后会干啥? 1. scripts里面写啥 2. node_modules/.bin 二进制可执行文件 二、运行插件配置 1. 运行某个npm包的命令 2. 多个命令一起运行  总结 配置package.json中scripts脚本是node开发中第一技能。

    2024年02月05日
    浏览(38)
  • Chrome 插件 V3 版本 Manifest.json 中的内容脚本(Content Scripts)解析

    指定在用户打开某些网页时要使用的 JavaScript 或 CSS 文件。 内容脚本是在网页环境中运行的文件。通过使用标准文档对象模型 ( DOM ),开发者能够读取浏览器所访问网页的详情、更改这些网页,并将信息传递给其父级扩展程序。 内容脚本在声明扩展程序文件为可通过网络访问

    2024年01月19日
    浏览(34)
  • 简单使用!使用shell脚本实现ssh免密登录

    目录 1.expect命令:可以在外输入,某些命令执行后弹出的输入提示 2.使用expect命令来创建本地的公钥文件 3.复制ssh的公钥文件到各个主机上: 4.完整的shell脚本:

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包