Возвращать попадания из одного сегмента при выполнении поиска по геодистанции в asticsearch .net
Я хочу сделать гео-поиск, где он должен сначала найти все локации на расстоянии до 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)));
Но я не знаю, как вернуть попадания для первого сегмента, который имеет более 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);
}
Это работает, но мне было интересно, есть ли лучший способ добиться этого?