前n个术语的平均值

时间:2015-07-23 11:36:12

标签: elasticsearch

在某个索引文档中有一个关键字,一个等级和一个时间戳。关键字的排名可能会不时发生变化。这意味着数据集可能如下所示:

{"keywords": "piano", "rank" 1, "timestamp": 1437642812}
{"keywords": "piano", "rank" 2, "timestamp": 1437642813}
{"keywords": "electric guitar", "rank" 5, "timestamp": 1437644326}

我想获得前500个最常出现的关键字的平均排名。但我无法知道如何做到这一点。

我目前的尝试似乎总是单独给出结果的平均值,但我想得到整个数据集的平均值,只有聚合的最高结果。

POST _search
{
    "aggs": {
        "top_keywords": {
            "terms": {
                "field": "keywords",
                "size": 1
            }
        },
        "avg_rank": {
            "avg": {"field": "rank"}
        }
    },
    "size": 0
}

尝试使用top_hits也没有成功。

在其他地方,我已经阅读过将查询拆分为单独的查询,首先检索顶级关键字列表,然后在第二个查询中按照第一个查询返回的关键字过滤文档。我想将查询提供给Kibana,所以我希望这不是必需的。

这些相关主题也不能提供令人满意的答案。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

ElasticsSearch开发人员告诉我目前无法实现:

  

在当前版本中,这是不可能的,但是使用版本2.0中的管道聚合,您将能够使用avg_bucket聚合来执行此操作:https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-pipeline-avg-bucket-aggregation.html

     

与此同时,您需要对前500个术语进行聚合并在客户端执行平均计算

这使得目前无法在Kibana中显示这些数据:

  

是的,这可以在2.0中直接用于Elasticsearch的请求。但是,将功能添加到Kibana界面需要一些时间。 Kibana团队正在思考如何添加

来源:https://discuss.elastic.co/t/average-of-top-n-terms/26165