Elasticsearch:按地理距离排序时如何仅保留指定类型的前2条结果?
解决方案:筛选特定类型并返回前2个地理邻近地点
没问题,这需求很容易实现,咱们直接调整原有的查询逻辑就能达成目标,核心就是精准过滤指定类型+限制返回结果数量,同时保留地理邻近性的排序规则。
修改后的完整查询如下:
{ "query": { "bool": { "filter": [ { "geo_distance": { "distance": "20km", "location": { "lat": 48.856614, "lon": 2.3522219 } } }, { "term": { "type": 2 } } ] } }, "size": 2, "sort": [ { "_geo_distance": { "location": { "lat": 48.856614, "lon": 2.3522219 }, "order": "asc", "unit": "km", "distance_type": "plane" } } ] }
关键修改说明:
- 添加类型过滤:在
bool.filter里新增了一个term查询,精准匹配type=2的文档。和原有的geo_distance过滤组合后,只会返回20km范围内且类型为2的地点,这一步是过滤结果的核心。 - 限制返回数量:把原查询中的
size从50改成2,这样Elasticsearch会直接返回排序后的前2个结果,完全符合你的需求。 - 保留地理排序:原有的
_geo_distance排序逻辑完全保留,确保结果依然按照离指定坐标的距离由近到远排列。
另外,如果你不需要原查询中的aggs聚合和空的post_filter,可以直接移除它们,让查询更简洁。
内容的提问来源于stack exchange,提问作者fxbois
相关产品推荐
相关产品推荐

