gpt4 book ai didi

node.js - 如何根据汇总结果进行计算?

转载 作者:行者123 更新时间:2023-12-03 01:23:49 27 4
gpt4 key购买 nike

例如,我可以使用以下代码获取对基于父id的特定url的平均请求计数的结果:

client.search({
index: 'console-*',
body: {
query: {
bool: {
query_string: {
query: 'meta.http.url:"https://www.google.com"'
}
}
},
aggs: {
parent_id: {
terms: {
field: 'parent_id'
}
}
}
},
size: 0
}).then(res => {
console.log(res.hits.total/res.aggregations.total.value)
})

现在,我们有许多类似的网址:
https://www.google.com
https://www.bing.com
https://www.apple.com

我可以使用:
client.search({
index: 'console-*',
body: {
sort: {
'@timestamp': {
order: 'asc'
}
},
query: {
bool: {
must: [{
range: {
'@timestamp': {
gte: 'now-5m',
lte: 'now'
}
}
}, {
query_string: { query: '_exists_:meta.http.url' }
}]
}
},
aggs: {
urls: {
terms: {
field: 'meta.http.url'
},
aggs: {
total: {
cardinality: {
field: 'parent_id'
}
}
}
}
}
},
size: 0
}).then(res => {
console.log(JSON.stringify(res))
console.log(res.aggregations.urls.buckets.map(o => {
const res = {};
res[o.key] = o.doc_count / o.total.value;
return res;
}))
})

是否可以在不进行Node.js额外计算的情况下获得结果?

最佳答案

是的,您可以利用管道聚合,更具体地说,可以利用 bucket_script one
aggs部分看起来像这样,在每个存储桶中,您将获得文档计数的结果除以compute部分中存储的总值:

aggs: {
urls: {
terms: {
field: 'meta.http.url'
},
aggs: {
total: {
cardinality: {
field: 'parent_id'
}
},
compute: {
bucket_script: {
buckets_path: {
count: "_count",
total: "total"
},
script: "params.count / params.total"
}
}
}
}
}

关于node.js - 如何根据汇总结果进行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59065316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com