我是Elasticsearch(特别是使用5.4.0)查询的新手,我正在尝试通过做一些例子来学习。我以为我有一个简单的例子,但我很难过。
我有一个基于时间的飞机起飞事件索引(离场-Y-M-D)和基于时间的飞机到达事件索引(到达-Y-M-D)。出发文件包含flight number
,timestamp
出发,飞机离开的机场(origin
)以及计划中的destination
机场。
{
"flight" : "DAL123",
"timestamp" : 1497390313000,
"origin" : "KATL",
"destination" : "KMSP"
}
到货文件的结构基本相同,含义略有不同。他们有flight number
,timestamp
到达,飞机最初离开的机场(origin
),以及该航班实际降落的机场(destination
)。 / p>
{
"flight" : "DAL123",
"timestamp" : 1497390313000,
"origin" : "KATL",
"destination" : "KMSP"
}
我正在尝试提出一个查询,根据每个机场在过去30天内的出发和到达总数,我将获得前20个最繁忙的机场。对于每个返回的机场,我想要在30天跨度内发生的离港次数,30天跨度内发生的到达次数,这两个数字的总和,以及每日平均出发/到达事件数量(总和) / 30天)。
如果我要编写某种伪sql(因为我觉得它可能会更清楚我要问的内容),它会是这样的:
select
departures.origin as airport
count(departures.*) as departures
count(arrivals.*) as arrivals
(count(departures.*) + count(arrivals.*)) as total
(total / 30) as average
from departures
join arrivals
on departures.origin = arrivals.destination
where timestamp <= midnight_of_today
and timestamp >= midnight_of_today - 30 days
group by airport
order by count descending
limit 20;
我一直在把很多时间都集中在聚合上,但ES的能力如此强,我担心我会把注意力放在错误的区域。
感谢任何帮助。即使它只是指向我会提供帮助的示例或文档。