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

时间:2016-11-07 12:58:46

标签: elasticsearch nest elasticsearch-2.0 elasticsearch-net

我想做一个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);
}

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

0 个答案:

没有答案