在elasticsearch .net中进行地理距离搜索时,从一个桶返回命中

Tom*_*len 5 elasticsearch nest elasticsearch-net elasticsearch-2.0

我想做一个geosearch,它应首先搜索50米范围内的所有位置,如果找到超过5个点击,然后返回那些.如果发现少于5次点击,我想扩展并搜索400米范围内的所有位置.再次,如果发现少于5次命中,我想扩展到1000米,但如果发现少于5次命中,我想返回那些而不是进一步扩展.我不想返回5个最接近的结果,我想将所有的命中数从最多返回到所使用的距离.

我像这样聚合:

aggregations.GeoDistance("nearby_locations", g => g
    .Field(f => f.GeoLocations)
    .DistanceType(GeoDistanceType.Arc)
    .Unit(DistanceUnit.Meters)
    .Origin((double)position.X, (double)position.Y)
    .Ranges(
        r => r.To(50),
        r => r.To(400),
        r => r.To(1000)));
Run Code Online (Sandbox Code Playgroud)

但我不知道如何返回有超过5次点击的第一个桶的命中.目前我正在检查哪个桶有超过5次点击,然后再对该距离进行另一次搜索.

var maxDistance = 1000;
response = Search(query, skip, size, position, maxDistance);
var distanceBucket = response.Aggs.GeoDistance("nearby_locations").Buckets
    .FirstOrDefault(x => x.DocCount > 5);

if(distanceBucket != null) {
    distanceUsed = (int)distanceBucket.To.Value;
    response = Search(query, skip, size, position, distanceUsed);
}
Run Code Online (Sandbox Code Playgroud)

这有效,但我想知道是否有更好的方法来实现这一目标?