2016-03-08 122 views
1

我有以下文件:Elasticsearch - 聚集排序指標

POST index/type 
{ 
    "profile": { 
    "tracks": [ 
     { 
     "title": "Track 1", 
     "count": 5 
     }, 
     { 
     "title": "Track 2", 
     "count": 3 
     } 
    ] 
    } 
} 

POST index/type 
{ 
    "profile": { 
    "tracks": [ 
     { 
     "title": "Track 2", 
     "count": 8 
     }, 
     { 
     "title": "Track 3", 
     "count": 1 
     } 
    ] 
    } 
} 

POST index/type 
{ 
    "profile": { 
    "tracks": [ 
     { 
     "title": "Track 4", 
     "count": 20 
     }, 
     { 
     "title": "Track 5", 
     "count": 1 
     } 
    ] 
    } 
} 

,其中「算」,在每個軌道項目屬性是曾扮演特定的軌道倍的用戶數量。

我想要按照播放次數排列曲目列表。所以在上面的例子中,預期的結果將是:

[ 
    { 
    "key": "Track 4", 
    "count": { 
     "value": 20 
    } 
    }, 
    { 
    "key": "Track 2", 
    "count": { 
     "value": 11 
    } 
    }, 
    { 
    "key": "Track 1", 
    "count": { 
     "value": 5 
    } 
    }, 
    { 
    "key": "Track 3", 
    "count": { 
     "value": 1 
    } 
    }, 
    { 
    "key": "Track 5", 
    "count": { 
     "value": 1 
    } 
    } 
] 

我曾嘗試:

"aggs": { 
    "track_count": { 
    "terms": { 
     "field": "profile.tracks.title", 
     "order": { 
      "count": "desc" 
     } 
    }, 
    "aggs": { 
     "count": { 
      "sum": { 
       "field": "profile.tracks.count" 
      } 
     } 
    } 
    } 
} 

但它似乎並不正確,因爲計數是通過對所有其他計數性能計算每個軌道項目。

我不知道如何構建我的聚合,以便通過對其他文檔中相同曲目的計數屬性進行求和來計算計數值。

任何幫助將不勝感激。謝謝。

回答

1

在映射中確保tracksnested-type

實施例:

put test/test/_mapping 
{ 
    "properties" : { 
     "profile" : { 
      "properties" : { 
       "tracks" : { 
        "type" : "nested" , 
        "properties" : { 
         "title" : 
         { 
          "type" : "string", 
          "index" : "not_analyzed" 
         }, 
         "count" :{ 
          "type" : "integer" 
         } 
        } 
       } 

      } 
     } 
    } 
} 

一旦標記爲嵌套一個可以再使用nested aggregations實現上述。

例子:

{ 
    "size": 0, 
    "aggs": { 
     "tracks_agg": { 
     "nested": { 
      "path": "profile.tracks" 
     }, 
     "aggs": { 
      "tracks": { 
       "terms": { 
        "field": "profile.tracks.title", 
        "order": { 
        "count": "desc" 
        } 
       }, 
       "aggs": { 
        "count": { 
        "sum": { 
         "field": "profile.tracks.count" 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 
+0

太好了!有用!感謝您的幫助。 – passkey1510