terms-aggregation.asciidoc 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. [[java-aggs-bucket-terms]]
  2. ==== Terms Aggregation
  3. Here is how you can use
  4. {ref}/search-aggregations-bucket-terms-aggregation.html[Terms Aggregation]
  5. with Java API.
  6. ===== Prepare aggregation request
  7. Here is an example on how to create the aggregation request:
  8. [source,java]
  9. --------------------------------------------------
  10. AggregationBuilders
  11. .terms("genders")
  12. .field("gender");
  13. --------------------------------------------------
  14. ===== Use aggregation response
  15. Import Aggregation definition classes:
  16. [source,java]
  17. --------------------------------------------------
  18. import org.elasticsearch.search.aggregations.bucket.terms.Terms;
  19. --------------------------------------------------
  20. [source,java]
  21. --------------------------------------------------
  22. // sr is here your SearchResponse object
  23. Terms genders = sr.getAggregations().get("genders");
  24. // For each entry
  25. for (Terms.Bucket entry : genders.getBuckets()) {
  26. entry.getKey(); // Term
  27. entry.getDocCount(); // Doc count
  28. }
  29. --------------------------------------------------
  30. ===== Order
  31. Import bucket ordering strategy classes:
  32. [source,java]
  33. --------------------------------------------------
  34. import org.elasticsearch.search.aggregations.BucketOrder;
  35. --------------------------------------------------
  36. Ordering the buckets by their `doc_count` in an ascending manner:
  37. [source,java]
  38. --------------------------------------------------
  39. AggregationBuilders
  40. .terms("genders")
  41. .field("gender")
  42. .order(BucketOrder.count(true))
  43. --------------------------------------------------
  44. Ordering the buckets alphabetically by their terms in an ascending manner:
  45. [source,java]
  46. --------------------------------------------------
  47. AggregationBuilders
  48. .terms("genders")
  49. .field("gender")
  50. .order(BucketOrder.key(true))
  51. --------------------------------------------------
  52. Ordering the buckets by single value metrics sub-aggregation (identified by the aggregation name):
  53. [source,java]
  54. --------------------------------------------------
  55. AggregationBuilders
  56. .terms("genders")
  57. .field("gender")
  58. .order(BucketOrder.aggregation("avg_height", false))
  59. .subAggregation(
  60. AggregationBuilders.avg("avg_height").field("height")
  61. )
  62. --------------------------------------------------
  63. Ordering the buckets by multiple criteria:
  64. [source,java]
  65. --------------------------------------------------
  66. AggregationBuilders
  67. .terms("genders")
  68. .field("gender")
  69. .order(BucketOrder.compound( // in order of priority:
  70. BucketOrder.aggregation("avg_height", false), // sort by sub-aggregation first
  71. BucketOrder.count(true))) // then bucket count as a tie-breaker
  72. .subAggregation(
  73. AggregationBuilders.avg("avg_height").field("height")
  74. )
  75. --------------------------------------------------