在使用Elasticsearch(es)进行DSL查询时,免不了有字段间进行比较、四则运算等一些简单的查询过程中的计算需求,那么我们就需要用到es查询语法中的script参数。通用过用script参数,我们就可以进行一些基本的比较和其他的运算。
举两个示例:
1、在多层分组(类似于MySQL、pandas中的多字段 groupby 功能)聚合结果中,我们需要计算subterm_count占term_count的比例,那么我们就需要用到script进行计算:
代码示图
注:这里需要先定义两个参数,利用两个参数间接计算比例值perc。参数定义需要指定参数路径,
param_all:最外层term,直接All_count;
param_miss:Miss_count term下面是subterm ,所以是Miss_count>miss_count;
计算结果 perc = "params.miss/params.all"。
2、通过比较或者计算两个字段值,来过滤符合条件的数据时,那么我们就需要用到script:
request跟time-upstream_response_tiime比较
注:这里实现的是筛选出,request跟time-upstream_response_tiime差值大于5的数据。这里需要注意的是字段内容Type,需要用.value的形式进行转化。