ElasticSearch使用脚步做数学运算 加减乘除

ElasticSearch使用脚步做数学运算 加减乘除

ElasticSearch版本:7.X

ElasticSearch的脚本提供了加、减、乘、除、取模、乘方、开方、对数等运算

1、加、减、乘、除、取模、乘方、开方、对数等运算

2、脚本简单语法

3、对索引中的字段运算

1、加、减、乘、除、取模、乘方、开方、对数等运算

1.1 expression脚本

GET metric/_search   	//metric自己的索引名
{
  "size": 1,             //这里只是看一下运算结果,所以看一条就够了,自己用的时候根据自己的实际情况
  "script_fields": {
  //1、计算相加
    "sum": {			//sum自己定义的字段名,用于存放计算结果
      "script": {
        "lang": "expression", //脚本语言,它默认painless,这里用的是expression
        "source": "2 + 3"		//脚本内容
      }
    },
	//2、计算相减
    "sub":{				//sub自己定义的字段名,用于存放计算结果
      "script":{
        "lang": "expression",
        "source": "10 - 2"
      }
    },
	//3、计算相乘
    "mul":{				//自己定义的字段名,用于存放计算结果
      "script":{
        "lang": "expression",
        "source": "3 * 8"
        
      }
    },
	//计算相除
    "div":{				//自己定义的字段名,用于存放计算结果
      "script":{
        "lang": "expression",
        "source": "100 / 3"
        
      }
    },
	//取模运算
    "mod":{				//自己定义的字段名,用于存放计算结果
      "script":{
        "lang": "expression",
        "source": "100 % 3"
        
      }
    },
	//乘方运算
    "pow":{				//自己定义的字段名,用于存放计算结果
      "script":{
        "lang": "expression",
        "source": "pow(3,3)"
        
      }
    },
	//开方运算
    "pow/1":{				//自己定义的字段名,用于存放计算结果
      "script":{
        "lang": "expression",
        "source": "pow(27,1/3)"
        
      }
    },
	//开平方,根号运算
    "sqrt"				//自己定义的字段名,用于存放计算结果
      "script":{
        "lang": "expression",
        "source": "sqrt(100)"
        
      }
    },
    "ln":{				//自己定义的字段名,用于存放计算结果
      "script":{
        "lang": "expression",
        "source": "ln(2)+ln(5)"
        
      }
    }
  }
}

执行结果:

其他内容省略
 "fields" : {
          "div" : [
            33.333333333333336
          ],
          "sub" : [
            8
          ],
          "ln" : [
            2.3025850929940455
          ],
          "mod" : [
            1.0
          ],
          "pow/1" : [
            3.0
          ],
          "mul" : [
            24.0
          ],
          "sqrt" : [
            10.0
          ],
          "pow" : [
            27.0
          ],
          "sum" : [
            5.0
          ]
        }
      }
    ]
  }

2、painless脚本

GET metric/_search   	
{
  "size": 1,        
  "script_fields": {
    "pow":{				
      "script":{
        "lang": "painless",
        "source": "Math.pow(3,3)"
        
      }
    },
    "pow/1":{				
      "script":{
        "lang": "painless",
        "source": "Math.pow(27,1/3)"
        
      }
    },
    "sqrt":{				
      "script":{
        "lang": "painless",
        "source": "Math.sqrt(100)"
        
      }
   },
    "log":{				
      "script":{
        "lang": "painless",
        "source": "Math.log(Math.E)"
        
      }
   }
  }
}

执行结果:

  "fields" : {
          "pow/1" : [
            1.0
          ],
          "sqrt" : [
            10.0
          ],
          "log" : [
            1.0
          ],
          "pow" : [
            27.0
          ]
        }

2、脚本简单语法

  "script": {
    "lang":   "...",  
    "source" | "id": "...", 
    "params": { ... } 
  }

官方给出的解释:

1、The language the script is written in, which defaults to painless.
2、The script itself which may be specified as source for an inline script or id for a stored script.
3、Any named parameters that should be passed into the script.

3、对索引中的字段运算

以系统资源指标为例,算出cpu的使用率

cpu使用率=cpu总使用率/cpu核数

脚本获取字段值的方法:doc['字段名']

GET metric/_search
{
  "from": 0, 
  "size": 1, 		//取最新的一条数据,下面按时间排序了
  "query": {
    "match": {		//筛选与cpu相关的指标
      "metricset.name":"cpu"
    }
  },
  "sort":{			//按时间排序
    "timestamp":"desc"
  },
  "_source": {		//控制显示的字段
    "includes": ["cpu_pct","system.cpu.cores","system.cpu.total.pct","timestamp"]
  },
  "script_fields": {
    "cpu_pct": {	//自己定义存放结果的名称	
      "script": {
         "lang":   "expression", //使用expression脚本
        "source": "doc['system.cpu.total.pct'] / doc['system.cpu.cores']"
      }
    }
  }
}

4、对人工智能感兴趣点击下面的连接

现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点这里可以跳转到教程。

https://www.cbedai.net/u014646662

发布了139 篇原创文章 · 获赞 273 · 访问量 666万+

猜你喜欢

转载自blog.csdn.net/u014646662/article/details/98170053
今日推荐