如何使用范围时间和条款进行聚合

时间:2016-10-06 18:29:12

标签: elasticsearch aggregation

创意:通过start_time搜索特定范围和顺序的热门事件。喜欢:

    {
    "from": 0,
    "size": 7,
    "query": {
        "filtered": {
            "query": { "match_all": {} },
            "filter": {
                "and": [
                    { "bool": { "must_not": { "term": { "status": "OK" } } } },
                    { "bool": { "must": { "term": { "is_blocked": false } } } }, {
                        "range": {
                            "start_time": {
                                "gte": "2016-01-01",
                                "lte": "2016-03-01"
                            }
                        }
                    }, {
                        "bool": {
                            "must": {
                                "geo_distance": {
                                    "distance": "150km",
                                    "coordinates": "xx.xxx, zz.zz "
                                }
                            }
                        }
                    }
                ]
            }
        }
    },
    "sort": [{ "start_time": "asc" },
        { "attending": "desc" }
    ]
}

我对这个聚合概念很新,所以仍然需要了解基本问题 我想在接下来的2个月中获得7项顶级赛事的结果。所以我有两个属性要看。参加人数最多(参加者)是Top的定义,但我也想按时间排序(start_time:asc) 我开始写的但错了:

    {
            "aggs": {
                "aggs": {
                    "event_interval": {
                        "date_histogram": {
                            "field": "start_time",
                            "interval": "2M",
                            "format": "dateOptionalTime"
                        }
                    },
                    "max_attending": { "max": { "field": "attending" } },
                    "_source": {
                        "include": [
                            "name"
                        ]
                    }
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

我不确定你是否需要使用聚合来获取你想要的内容,我认为一个简单的查询可以产生你想要看到的结果,试试这个:

{
  "size": 7,
  "sort": {
    "attending": {
      "order": "desc"
    }
  },
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "start_time": {
              "gte": "now-2M",
              "lte": "now"
            }
          }
        }
      ]
    }
  }
}