在某些索引中,文档具有关键字,等级和时间戳。关键字的排名可能会不时发生变化。这意味着数据集可能看起来像这样:

{"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中,所以我希望这不是必需的。

这些相关主题也无法提供令人满意的答案。
  • How to run terms aggregation scoped to the first `n` results
  • Aggregation on top N results

  • 谁能指出我正确的方向?

    最佳答案

    一个Elasticsearch开发人员告诉我,目前不可能:
    这使得当前无法在Kibana中显示此数据:
    资料来源:https://discuss.elastic.co/t/average-of-top-n-terms/26165

    关于elasticsearch - 前n个词的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31586201/

    10-11 07:48