Geo Distance Aggregation

More info about geo distance aggregation is in the official elasticsearch docs

A multi-bucket aggregation that works on geo_point fields and conceptually works very similar to the range aggregation.

Simple example

{
    "aggregations" : {
        "rings_around_amsterdam" : {
            "geo_distance" : {
                "field" : "location",
                "origin" : "52.3760, 4.894",
                "ranges" : [
                    { "to" : 100 },
                    { "from" : 100, "to" : 300 },
                    { "from" : 300 }
                ]
            }
        }
    }
}

And now the query via DSL:

$geoDistanceAggregation = new GeoDistanceAggregation(
    'rings_around_amsterdam',
    'location',
    '52.3760, 4.894',
    [
        ['to' => 100],
        ['from' => 100, 'to' => 300],
        ['from' => 300],
    ]
);

$search = new Search();
$search->addAggregation($geoDistanceAggregation);

$queryArray = $search->toArray();