在Elasticsearch汇总中获取更多字段而不是唯一一个

问题描述:

我是Elasticsearch的新手,我的程序有问题。
为了在SQL中将结果分组为像“group by”语句。我用聚合。
但我意识到有一个问题,我需要在这里解决。我用下面的语句来组我的结果:在Elasticsearch汇总中获取更多字段而不是唯一一个

{ 
    "aggs": { 
    "agg1": { 
     "terms": { 
     "field": "field1" 
     }, 
     "aggs": { 
     "agg2": { 
      "terms": { 
      "field": "field2" 
      }, 
      "aggs": { 
      "agg3": { 
       "terms": { 
       "field": "field3" 
       } 
      } 
      }   
     } 
     } 
    } 
    } 
} 

我的问题是:场和字段3的值取决于field1的值,所以如果你能得到field1的值,你也可以得到场2和字段3的值。因此,像上面那样进行聚合会花费很多时间来完成我的程序(我已经测试了它并意识到它耗费了比分组field1慢6倍的速度)。
所以我的问题是:是否有可能只组field1(只使用一个“aggs”),但也得到field2和field3值?
如果否,那么还有其他可能的方法来完成我的工作吗?
感谢提前:)

如果我理解正确,你正在寻找Top Hits聚合,可以包含任意数量的字段与source filtering,试试这个

{ 
    "size": 0, 
    "aggs": { 
    "agg1": { 
     "terms": { 
     "field": "field1" 
     }, 
     "aggs": { 
     "include_fields": { 
      "top_hits": { 
      "size": 100, 
      "_source": { 
       "include": [ 
       "field2", 
       "field3" 
       ] 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

谢谢你这么多,使得“大小”等于1是我需要的。 –

+0

很高兴我可以帮忙,你可以根据你想要的尺寸来制作尺寸,默认为10 – ChintanShah25