我正在使用Elasticsearch GeoHash网格聚合进行地图聚类。 查询平均返回100-200个桶。 每个存储桶都使用top_hits聚合,我用它为每个聚合集群返回3个文档。
问题是我只想在父聚合(GeoHash)聚合不超过3个文档时返回top_hits 。
如果群集聚合了超过3个文档,我不希望ES返回此群集的任何文档(因为我不会使用它们)。
我尝试使用Bucket Selector Aggregation,但没有设法构建正确的 bucket_path 。
我在与top_hits聚合相同的级别上使用桶选择器聚合。
文件夹的总文档数量位于top_hits.hits.total
,但我得到的是reason=path not supported for [top_hits]: [hits.total]
。
这在弹性搜索中是否可行? 这对我来说很重要,因为在大多数查询中,只有一小部分存储桶的文档少于3个。但是,对于1000个文档的集群,顶级命中子分段总是返回前3个文档。 如果查询结果返回200个桶,并且只有5个正在聚合< = 3个文档,那么我只想返回5 * 3个文档,而不是200 * 3(在这种情况下Te响应为10MB)。
以下是我的查询中的aggs部分:
"clusters": {
"geohash_grid": {
"field": "coordinates",
"precision": 3
},
"aggs": {
"top_hits": {
"top_hits": {
"size": 3
}
},
"top_hits_filter": {
"bucket_selector": {
"buckets_path": {
"total_hits": "top_hits._count" // tried top_hits.hits.total
},
"script": {
"inline": "total_hits <= 3"
}
}
}
}
}
答案 0 :(得分:6)
试试这个@ilivewithian:
"aggs": {
"clusters": {
"geohash_grid": {
"field": "coordinates",
"precision": 3
},
"aggs": {
"top_hits": {
"top_hits": {
"size": 3
}
},
"top_hits_filter": {
"bucket_selector": {
"buckets_path": {
"total_hits": "_count"
},
"script": {
"inline": "params.total_hits <= 3"
}
}
}
}
}
}