举个例子,让我们找到所有职员中最大的共同点(兴趣爱好)是什么:

    暂时先忽略语法只看查询结果:

    1. {
    2. ...
    3. "hits": { ... },
    4. "aggregations": {
    5. "all_interests": {
    6. "buckets": [
    7. {
    8. "key": "music",
    9. "doc_count": 2
    10. },
    11. {
    12. "key": "forestry",
    13. "doc_count": 1
    14. },
    15. {
    16. "key": "sports",
    17. "doc_count": 1
    18. }
    19. ]
    20. }

    all_interests聚合已经变成只包含和查询语句相匹配的文档了:

    1. ...
    2. "all_interests": {
    3. "buckets": [
    4. {
    5. "key": "music",
    6. "doc_count": 2
    7. },
    8. {
    9. "key": "sports",
    10. "doc_count": 1
    11. }
    12. ]
    13. }

    聚合也允许分级汇总。例如,让我们统计每种兴趣下职员的平均年龄:

    1. ...
    2. "all_interests": {
    3. "buckets": [
    4. {
    5. "avg_age": {
    6. "value": 28.5
    7. }
    8. },
    9. {
    10. "key": "forestry",
    11. "doc_count": 1,
    12. "avg_age": {
    13. "value": 35
    14. }
    15. },
    16. {
    17. "key": "sports",
    18. "doc_count": 1,
    19. "avg_age": {
    20. "value": 25
    21. }
    22. }
    23. }

    该聚合结果比之前的聚合结果要更加丰富。我们依然得到了兴趣以及数量(指具有该兴趣的员工人数)的列表,但是现在每个兴趣额外拥有字段来显示具有该兴趣员工的平均年龄。

    即使你还不理解语法,但你也可以大概感觉到通过这个特性可以完成相当复杂的聚合工作,你可以处理任何类型的数据。