你不会是程序猿吧?

我要对两个字段进行计算,然后对计算出来对新字段进行聚合

Elasticsearch | 作者 Atom | 发布于2019年09月24日 | 阅读数:3448


WX20190924-175734.png

我的日志中有这两个字段,request_time和size
我要生成一个新的字段,speed = size/request_time  得到下载速度
 
然后在通过聚合获取speed最大对前10个值
 
请问请求语句中需要怎么写
已邀请:

stone_xy

赞同来自: Atom Reilee

用function score自定义打分,然后按照打分取前十条。
POST log/doc/_search
{
"size": 10,
"query": {
"function_score": {
"query": {
"match_all": {}
},
"script_score": {
"script": {
"source": "doc.size.value / doc.request_time.value"
}
}
}
},
"sort": [
{
"_score": {
"order": "desc"
}
}
]
}

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: Atom

doom

赞同来自: Atom

GET log/_search
{
"size" : 10,
"_source" : false,
"stored_fields" : "_none_",
"sort" : [
{
"_script" : {
"script" : {
"source" : "doc['size'].value /doc ['request_time'].value ",
"lang" : "painless"
},
"type" : "number",
"order" : "desc"
}
}
]
}
或者直接使用sql的方式:
POST /_xpack/sql?format=txt
{
  "query":"select (size/request_time) as speed from log order by speed desc",
  "fetch_size": 10
}

要回复问题请先登录注册