Возвращать попадания из одного сегмента при выполнении поиска по геодистанции в 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);
}

Это работает, но мне было интересно, есть ли лучший способ добиться этого?

0 ответов

Другие вопросы по тегам