[英]Weighted Average with ElasticSearch
我是ElasticSearch的新手,我正试图在我的索引中加权平均值。
我的数据如下:
data = [{"id": 344,"q28": 1},{"id": 344,"q28": 1},{"id": 344,"q28": 2}, ...]
“q28”:可以等于1,2,3或4
JavaScript中的示例:
var data = [{"id": 344,"q28": 1},{"id": 344,"q28": 1},{"id": 344,"q28": 2}]
function calcWeightAverage(res) {
var score = 0
for (var i in res) {
if (res[i].q28 == 1)
score += 100
else if (res[i].q28 == 2)
score += 50
else if (res[i].q28 == 3)
score += 25
else if (res[i].q28 == 4)
score += 0
}
return score / res.length
}
console.log(calcWeightAverage(data)) // output 83.333...
你能帮我找到一个可以直接在ElasticSearch中计算q28加权平均值的查询吗?
谢谢 !
我很接近,请参阅:“ https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html ”
为了测试它,我在config / scripts / my_script.groovy中创建了一个文件
1 + my_var
然后你必须重新启动ElasticSearch并进行以下查询:
GET /_search
{
"script_fields": {
"my_field": {
"script": {
"file": "my_script",
"params": {
"my_var": 2
}
}
}
}
}
它正在工作,现在我必须处理脚本。 如何循环我的所有数据来做我的javascript函数?
只是为了帮助你缩短平均值的Javascript部分。
function calcWeightAverage(res) { return res.reduce(function (r, a) { return r + ({ 1: 100, 2: 50, 3: 25, 4: 0 }[a.q28] || 0); }, 0) / res.length; } var data = [{ id: 344, q28: 1 }, { id: 344, q28: 1 }, { id: 344, q28: 2 }]; console.log(calcWeightAverage(data));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.