最后的修改

让我们回到话题的原点,在进入新话题之前,对我们的示例做最后一个修改,为每个汽车生成商计算最低和最高的价格:

  1. GET /cars/transactions/_search
  2. {
  3. "size" : 0,
  4. "aggs": {
  5. "colors": {
  6. "terms": {
  7. "field": "color"
  8. },
  9. "aggs": {
  10. "avg_price": { "avg": { "field": "price" }
  11. },
  12. "make" : {
  13. "terms" : {
  14. "field" : "make"
  15. },
  16. "aggs" : { (1)
  17. "min_price" : { "min": { "field": "price"} }, (2)
  18. "max_price" : { "max": { "field": "price"} } (3)
  19. }
  20. }
  21. }
  22. }
  23. }
  24. }

<1> 我们需要增加另外一个嵌套的 aggs 层级。

<2> 然后包括 min 最小度量。

<3> 以及 max 最大度量。

得到以下输出(只显示部分结果):

  1. {
  2. ...
  3. "aggregations": {
  4. "colors": {
  5. "buckets": [
  6. {
  7. "key": "red",
  8. "doc_count": 4,
  9. "make": {
  10. "buckets": [
  11. {
  12. "key": "honda",
  13. "doc_count": 3,
  14. "min_price": {
  15. "value": 10000 (1)
  16. },
  17. "max_price": {
  18. "value": 20000 (1)
  19. }
  20. },
  21. {
  22. "key": "bmw",
  23. "doc_count": 1,
  24. "min_price": {
  25. "value": 80000
  26. },
  27. "max_price": {
  28. "value": 80000
  29. }
  30. }
  31. ]
  32. },
  33. "avg_price": {
  34. "value": 32500
  35. }
  36. },
  37. ...

<1> minmax 度量现在出现在每个汽车制造商( make )下面。

有了这两个桶,我们可以对查询的结果进行扩展并得到以下信息:

  • 有四辆红色车。
  • 红色车的平均售价是 $32,500 美元。
  • 其中三辆红色车是 Honda 本田制造,一辆是 BMW 宝马制造。
  • 最便宜的红色本田售价为 $10,000 美元。
  • 最贵的红色本田售价为 $20,000 美元。