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)
这有效,但我想知道是否有更好的方法来实现这一目标?
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |