簡體   English   中英

ElasticSearch的加權平均值

[英]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加權平均值的查詢嗎?

謝謝 !


更新1

我很接近,請參閱:“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM