gpt4 book ai didi

Elasticsearch - 按指标聚合排序

转载 作者:行者123 更新时间:2023-12-02 23:31:35 25 4
gpt4 key购买 nike

我有以下文件:

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"
}
}
}
}
}

但这似乎不正确,因为计数是通过对每个轨道项的所有其他计数属性求和来计算的。

我不知道如何构建我的聚合,以便通过对其他文档中相同轨道的计数属性求和来计算计数值。

任何帮助将不胜感激。谢谢你。

最佳答案

在映射中确保 tracks属于 nested-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"
}
}
}
}
}
}
}
}

关于Elasticsearch - 按指标聚合排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35872071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com