簡體   English   中英

如何在Elasticsearch中計算平均最小時間?

[英]How to calculate average minimal times in Elasticsearch?

使用Elasticsearch版本是5.4.2

我想建立一個Elasticsearch查詢來滿足三個條件。

  1. 按ChampionId篩選
  2. 在每個游戲中獲得最少的時間購買各種物品
  3. 計算在所有游戲中購買每個物品的平均最短時間。

我做了1和2。但是我找不到解決方法3。可以在查詢中執行1到3嗎? 以防萬一,我將在PHP框架之一的Laravel 5.4上使用結果。

我的數據格式如下:

"_index": "timelines",
"_type": "timeline"
"_source": {
      "gameId": 152735348,
      "participantId": 3,
      "championId": 35,
      "role": "NONE",
      "lane": "JUNGLE",
      "win": 1,
      "itemId": 1036,
      "timestamp": 571200
}

我當前的Elasticsearch查詢是這樣

GET timelines/_search?size=0&pretty
{
  "query": {
    "bool": {
      "must": [
        { "match": { "championId":  22 }}
      ]
    }
  },
  "aggs": {
   "games": {
     "terms": {
       "field": "gameId"
     },
     "aggs": {
       "items": {
         "terms": {
           "field": "itemId",
           "order" : { "min_buying_time" : "asc" }
         },
         "aggs": {
           "min_buying_time": {
             "min": {
               "field": "timestamp"
             }
           }
         }
       }
     }
   }
  }
}

正如@SönkeLiebau所說,管道聚合是關鍵,但是如果您要計算每個項目所有游戲的平均最短時間,則應首先按itemID進行聚合。 以下代碼應有所幫助:

POST misko/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "championId":  22 }}
      ]
    }
  },
  "aggs": {
    "items": {
      "terms": {
       "field": "itemId"
     },
     "aggs": {
       "games": {
         "terms": {
           "field": "gameId"
         },
         "aggs": {
           "min_buying_time": {
             "min": {
               "field": "timestamp"
             }
           }
         }
       },
       "avg_min_time": {
         "avg_bucket": {
           "buckets_path": "games>min_buying_time"
         }
       }
     }
   }
  }
}

如果我正確地理解了您的目標,那么您應該可以使用管道聚合來解決此問題。 更具體地說,對於您的用例, Avg Bucket聚合應該會有所幫助,請查看文檔中的示例,該示例應該非常接近您的需求。

就像是:

"avg_min_buying_time": {
      "avg_bucket": {
        "buckets_path": "games>min_buying_time" 
      }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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