簡體   English   中英

在Elasticsearch中獲取每組的前n個值

[英]Get top n values per group in elasticsearch

我需要獲得前n名用戶,因為他們在Elasticsearch的不同日期具有數字字段之和。

例如,對於以下文檔,獲得前2名:

doc1 -> user_id: 1, name: hasan, numeric_field: 2, date_calculated: 03-10-2015
doc2 -> user_id: 2, name: veli, numeric_field: 3, date_calculated: 03-10-2015
doc3 -> user_id: 3, name: osman, numeric_field: 1, date_calculated: 03-10-2015
doc4 -> user_id: 1, name: hasan, numeric_field: 3, date_calculated: 04-10-2015
doc5 -> user_id: 2, name: veli, numeric_field: 5, date_calculated: 04-10-2015
doc6 -> user_id: 3, name: osman, numeric_field: 7, date_calculated: 04-10-2015
doc7 -> user_id: 1, name: hasan, numeric_field: 5, date_calculated: 05-10-2015
doc8 -> user_id: 2, name: veli, numeric_field: 8, date_calculated: 05-10-2015
doc9 -> user_id: 3, name: osman, numeric_field: 9, date_calculated: 05-10-2015

用戶分組的numeric_field的總和=> hasan : 10, veli : 16, osman : 17

對於此示例,我需要將結果作為前2個-> { osman : 17, veli : 16 }

我應該對此進行哪種查詢?

@ ChintanShah25的答案和@Val的評論很有幫助。 完整的工作方案如下。 注意,shard_size很重要。 如果您未將其設置為“ 0”,則可能會看到錯誤的結果。

{
  "size": 0,
  "aggs": {
    "user_agg": {
      "terms": {
        "field": "name",
        "shard_size": 0, 
        "size": 2,
        "order": {
              "sum_agg": "desc"
        }
      },
      "aggs": {
        "sum_agg": {
          "sum": {
            "field": "numeric_field"
          }
        }
      }
    }
  }
}

您需要使用ElasticSearch聚合。 我正在使用以下查詢

{
  "size": 0,
  "aggs": {
    "user_agg": {
      "terms": {
        "field": "name"
      },
      "aggs": {
        "sum_agg": {
          "sum": {
            "field": "numeric_field"
          }
        }
      }
    }
  }
}

這是我得到的結果

"buckets": [
            {
               "key": "hasan",
               "doc_count": 3,
               "sum_agg": {
                  "value": 10
               }
            },
            {
               "key": "osman",
               "doc_count": 3,
               "sum_agg": {
                  "value": 17
               }
            },
            {
               "key": "veli",
               "doc_count": 3,
               "sum_agg": {
                  "value": 16
               }
            }
         ]

我無法獲得前n個結果。 我嘗試在匯總匯總中使用熱門匹配匯總,但事實證明匯總匯總不支持子匯總。

您可以嘗試對sum_agg值進行排序。 您可以在此處閱讀有關聚合的更多信息。 https://www.elastic.co/guide/zh-CN/elasticsearch/reference/master/search-aggregations.html

我希望這有幫助!

暫無
暫無

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

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