Elasticsearch: 权威指南 » 聚合
    添加索引数据:

    1. POST /cars/transactions/_bulk
    2. { "index": {}}
    3. { "price" : 10000, "color" : "red", "make" : "honda", "sold" : "2014-10-28" }
    4. { "index": {}}
    5. { "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
    6. { "index": {}}
    7. { "price" : 30000, "color" : "green", "make" : "ford", "sold" : "2014-05-18" }
    8. { "index": {}}
    9. { "price" : 15000, "color" : "blue", "make" : "toyota", "sold" : "2014-07-02" }
    10. { "index": {}}
    11. { "price" : 12000, "color" : "green", "make" : "toyota", "sold" : "2014-08-19" }
    12. { "index": {}}
    13. { "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
    14. { "index": {}}
    15. { "price" : 80000, "color" : "red", "make" : "bmw", "sold" : "2014-01-01" }
    16. { "index": {}}
    17. { "price" : 25000, "color" : "blue", "make" : "ford", "sold" : "2014-02-12" }

    聚合查询:

    1. GET /cars/transactions/_search
    2. {
    3. "size": 0,
    4. "aggs": {
    5. "popular_colors": {
    6. "terms": {
    7. "field": "color.keyword"
    8. }
    9. }
    10. }
    11. }
    • 聚合操作被置于顶层参数 aggs 之下(如果你愿意,完整形式 aggregations 同样有效)。
    • 然后,可以为聚合指定一个我们想要名称,本例中是: popular_colors 。
    • 最后,定义单个桶的类型 terms 。

    可能会注意到我们将 size 设置成 0 。我们并不关心搜索结果的具体内容,所以将返回记录数设置为 0 来提高查询速度。 设置 size: 0 与 Elasticsearch 1.x 中使用 count 搜索类型等价。
    查询结果:

    1. {
    2. "took" : 3,
    3. "timed_out" : false,
    4. "_shards" : {
    5. "total" : 1,
    6. "successful" : 1,
    7. "skipped" : 0,
    8. "failed" : 0
    9. },
    10. "hits" : {
    11. "total" : {
    12. "value" : 8,
    13. "relation" : "eq"
    14. },
    15. "max_score" : null,
    16. "hits" : [ ]
    17. },
    18. "aggregations" : {
    19. "popular_colors" : {
    20. "doc_count_error_upper_bound" : 0,
    21. "sum_other_doc_count" : 0,
    22. "buckets" : [
    23. {
    24. "key" : "red",
    25. "doc_count" : 4
    26. },
    27. {
    28. "key" : "blue",
    29. "doc_count" : 2
    30. },
    31. {
    32. "key" : "green",
    33. "doc_count" : 2
    34. }
    35. ]
    36. }
    37. }
    38. }
    • 因为我们设置了 size 参数,所以不会有 hits 搜索结果返回。
    • popular_colors 聚合是作为 aggregations 字段的一部分被返回的。
    • 每个桶的 key 都与 color 字段里找到的唯一词对应。它总会包含 doc_count 字段,告诉我们包含该词项的文档数量。
    • 每个桶的数量代表该颜色的文档数量。