我正在尝试按城市列出顶级旅行者。映射就是这个
{
"log" : {
"mappings" : {
"travels" : {
"_ttl" : {
"enabled" : true,
"default" : 7776000000
},
"properties" : {
"_type" : {
"type" : "string"
},
"date" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"traveler" : {
"type" : "string",
"index" : "not_analyzed"
},
"cities" : {
"type" : "nested",
"properties" : {
"count" : {
"type" : "integer"
},
"name" : {
"type" : "integer"
}
}
}
}
}
}
}
}
我设法使用反向嵌套聚合,但我无法弄清楚汇总聚合的位置。我做的是
{
"aggs":{
"travels":{
"nested":{
"path":"cities"
},
"aggs":{
"top_ids":{
"terms":{
"shard_size":0,
"field":"cities.name"
},
"aggs":{
"cities_to_traveler":{
"reverse_nested":{},
"aggs":{
"top_travelers":{
"terms":{
"field":"traveler"
}
}
}
}
}
}
}
}
}
}
我该怎么做?如果我能提供更多代码,请告诉你。
编辑:我想总结城市嵌套字段中的字段数。
答案 0 :(得分:1)
在每个聚合嵌套级别,您可以声明多个聚合。
在您的情况下,如果您想要计算每个城市的点数,您可以将sum
汇总声明为与cities_to_traveler
相同的级别,如下所示:
{
"aggs": {
"travels": {
"nested": {
"path": "cities"
},
"aggs": {
"top_ids": {
"terms": {
"shard_size": 0,
"field": "cities.name"
},
"aggs": {
"cities_to_traveler": {
"reverse_nested": {},
"aggs": {
"top_travelers": {
"terms": {
"field": "traveler"
}
}
}
},
"total": {
"sum": {
"field": "cities.count"
}
}
}
}
}
}
}
}
对于每个城市,您将拥有所有旅行者的总数。
但是,我不确定这正是你想要的:我怀疑你想要每个城市,旅行者按照他们前往这个特定城市的次数计算。
在这种情况下,您可以查看top_hits
聚合,按cities.count
(documentation here)排序结果。