标准化存储桶以进行多级术语聚合

问题描述

我有一个聚合查询,如下所示:

{
    "aggs": {
        "genres": {
            "terms": {
                "field": "genre","size": 2
            },"aggs": {
                "artists": {
                    "terms": {
                        "field": "artist","size": 3
                    }
                }
            }
        }
    }
}

我获得最高流派,每一种流派都获得最高艺术家。结果看起来像这样:

{
    "genres": {
        "buckets": [
            {
                "key": "genre1","doc_count": 1000,"artists": [
                    {
                        "key": "artist1","doc_count": 100
                    },{
                        "key": "artist2",{
                        "key": "artist3","doc_count": 100
                    }
                ]
            },{
                "key": "genre2","artists": [
                    {
                        "key": "artist3",{
                        "key": "artist4",{
                        "key": "artist5","doc_count": 100
                    }
                ]
            }
        ]
    }
}

我想进行归一化(不确定是否是正确的术语),每个流派返回的艺术家,因此它总是返回前3名,但也返回其他流派返回的任何其他艺术家。因此,无论我看哪种类型的作品,我都会看到相同的艺术家。我希望返回的结果看起来像这样:

{
    "genres": {
        "buckets": [
            {
                "key": "genre1","doc_count": 5
                    },"doc_count": 2
                    }
                ]
            },{
                        "key": "artist1","doc_count": 3
                    },"doc_count": 1
                    }
                ]
            }
        ]
    }
}

在Elasticsearch中这可能吗?如果没有,是否有人有任何整洁的方法来处理结果以达到结果集?

为了使问题更有趣一点,这仅是2个级别(类型和艺术家),但是我希望能够在任意数量的级别上做到这一点。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...