我想做一个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)));
但是我不知道如何返回超过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);
}
这有效,但我想知道是否有更好的方法来实现这一目标?