iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
Elastic Stack on Cloud

Python&Elasticsearch 入門系列 第 22

IT鐵人第22天 Elasticsearch 腳本語言 expression painless

昨天的文章中有提到一個叫做腳本語言的東西,之後的文章可能也會常用到,所以今天就來介紹一下吧

介紹一些簡單的使用方法

expression

拿取字段的值

doc['field_name'].value
or
doc.field_name.value

判斷字段是否有值,返回布林

doc['field_name'].empty

字段長度

doc['field_name'].length

字段數值

doc['field_name'].min()  最小
doc['field_name'].max()  最大
doc['field_name'].median() 中間值
doc['field_name'].avg()  平均值
doc['field_name'].sum()  總和

講完如何拿字段值,接下來就是如何運算
加減乘除就不多做贅述,就是一般的用法(ex:2 + 3)

取餘數

"mod":{				
  "script":{
    "lang": "expression",
    "source": "100 % 3"

  }
}

結果:

"mod" : [1.0]

平方

"pow":{				
  "script":{
    "lang": "expression",
    "source": "pow(3,3)"

  }
}

結果:

"pow" : [27.0]

開根號

"sqrt":{
  "script":{
    "lang": "expression",
    "source": "sqrt(100)"

  }
}

結果:

"sqrt" : [10.0]

對數

"ln":{
  "script":{
    "lang": "expression",
    "source": "ln(10)+ln(8)"
  }
}

結果:

"ln" : [4.382026634673881]

painless

painless是ES預設的腳本語言,有以下特性
1.性能快
2.擴展了java的基本語法
3.使用白名單來限制函數和字段的訪問
4.專為ES所設計,所以安全性很好,也很輕量

painless拿值的方式跟上面提到的大同小異,所以這邊就不多做贅述

painless的基本運算

平方

"pow":{				
  "script":{
    "lang": "painless",
    "source": "Math.pow(3,3)"

  }
}

開根號

"sqrt":{				
  "script":{
    "lang": "painless",
    "source": "Math.sqrt(100)"
  }
}

對數

"log":{				
  "script":{
    "lang": "painless",
    "source": "Math.log(10) + Math.log(8)"
  }
}

也可以把它當成java來寫

"test": {
  "script": {
    "lang": "painless",
    "source": "int a=1; int c=0; if(a>0){c=1;} return c"
  }
}

#記得要return數值
結果:

"test" : [1]

內容不要太在意,這邊只是告訴大家可以這樣使用

今天的文章就到這邊告一段落


上一篇
IT鐵人第21天 Elasticsearch 使用python查詢資料 Aggregations:Avg/Weighted Avg
下一篇
IT鐵人第23天 Elasticsearch 使用python查詢資料 Aggregations:Cardinality/Boxplot
系列文
Python&Elasticsearch 入門30

尚未有邦友留言

立即登入留言