- Java Transport Client (deprecated): other versions:
- Preface
- Maven Repository
- Deploying in JBoss EAP6 module
- Client
- Index API
- Get API
- Delete API
- Update API
- Bulk API
- Search API
- Count API
- Delete By Query API
- Facets
- Aggregations
- Percolate API
- Query DSL - Queries
- Match Query
- MultiMatch Query
- Boolean Query
- Boosting Query
- IDs Query
- Constant Score Query
- Disjunction Max Query
- Fuzzy Like This (Field) Query (flt and flt_field)
- FuzzyQuery
- Has Child / Has Parent
- MatchAll Query
- More Like This Query (mlt)
- Prefix Query
- QueryString Query
- Range Query
- Span Queries (first, near, not, or, term)
- Term Query
- Terms Query
- Top Children Query
- Wildcard Query
- Nested Query
- Indices Query
- GeoShape Query
- Query DSL - Filters
- And Filter
- Bool Filter
- Exists Filter
- Ids Filter
- Limit Filter
- Type Filter
- Geo Bounding Box Filter
- GeoDistance Filter
- Geo Distance Range Filter
- Geo Polygon Filter
- Geo Shape Filter
- Has Child / Has Parent Filters
- Match All Filter
- Missing Filter
- Not Filter
- Or Filter
- Prefix Filter
- Query Filter
- Range Filter
- Script Filter
- Term Filter
- Terms Filter
- Nested Filter
- Caching
Metrics aggregations
editMetrics aggregations
editMin Aggregation
editHere is how you can use Min Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .min("agg") .field("height");
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.min.Min;
// sr is here your SearchResponse object Min agg = sr.getAggregations().get("agg"); double value = agg.getValue();
Max Aggregation
editHere is how you can use Max Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .max("agg") .field("height");
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.max.Max;
// sr is here your SearchResponse object Max agg = sr.getAggregations().get("agg"); double value = agg.getValue();
Sum Aggregation
editHere is how you can use Sum Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .sum("agg") .field("height");
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
// sr is here your SearchResponse object Sum agg = sr.getAggregations().get("agg"); double value = agg.getValue();
Avg Aggregation
editHere is how you can use Avg Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .avg("agg") .field("height");
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
// sr is here your SearchResponse object Avg agg = sr.getAggregations().get("agg"); double value = agg.getValue();
Stats Aggregation
editHere is how you can use Stats Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .stats("agg") .field("height");
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.stats.Stats;
// sr is here your SearchResponse object Stats agg = sr.getAggregations().get("agg"); double min = agg.getMin(); double max = agg.getMax(); double avg = agg.getAvg(); double sum = agg.getSum(); long count = agg.getCount();
Extended Stats Aggregation
editHere is how you can use Extended Stats Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .extendedStats("agg") .field("height");
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats;
// sr is here your SearchResponse object ExtendedStats agg = sr.getAggregations().get("agg"); double min = agg.getMin(); double max = agg.getMax(); double avg = agg.getAvg(); double sum = agg.getSum(); long count = agg.getCount(); double stdDeviation = agg.getStdDeviation(); double sumOfSquares = agg.getSumOfSquares(); double variance = agg.getVariance();
Value Count Aggregation
editHere is how you can use Value Count Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .count("agg") .field("height");
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount;
// sr is here your SearchResponse object ValueCount agg = sr.getAggregations().get("agg"); long value = agg.getValue();
Percentile Aggregation
editHere is how you can use Percentile Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .percentiles("agg") .field("height");
You can provide your own percentiles instead of using defaults:
MetricsAggregationBuilder aggregation = AggregationBuilders .percentiles("agg") .field("height") .percentiles(1.0, 5.0, 10.0, 20.0, 30.0, 75.0, 95.0, 99.0);
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.percentiles.Percentile; import org.elasticsearch.search.aggregations.metrics.percentiles.Percentiles;
// sr is here your SearchResponse object Percentiles agg = sr.getAggregations().get("agg"); // For each entry for (Percentile entry : agg) { double percent = entry.getPercent(); // Percent double value = entry.getValue(); // Value logger.info("percent [{}], value [{}]", percent, value); }
This will basically produce for the first example:
percent [1.0], value [0.814338896154595] percent [5.0], value [0.8761912455821302] percent [25.0], value [1.173346540141847] percent [50.0], value [1.5432023318692198] percent [75.0], value [1.923915462033674] percent [95.0], value [2.2273644908535335] percent [99.0], value [2.284989339108279]
Percentile Ranks Aggregation
editHere is how you can use Percentile Ranks Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .percentileRanks("agg") .field("height") .percentiles(1.24, 1.91, 2.22);
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.percentiles.Percentile; import org.elasticsearch.search.aggregations.metrics.percentiles.PercentileRanks;
// sr is here your SearchResponse object PercentileRanks agg = sr.getAggregations().get("agg"); // For each entry for (Percentile entry : agg) { double percent = entry.getPercent(); // Percent double value = entry.getValue(); // Value logger.info("percent [{}], value [{}]", percent, value); }
This will basically produce:
percent [29.664353095090945], value [1.24] percent [73.9335313461868], value [1.91] percent [94.40095147327283], value [2.22]
Cardinality Aggregation
editHere is how you can use Cardinality Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .cardinality("agg") .field("tags");
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.cardinality.Cardinality;
// sr is here your SearchResponse object Cardinality agg = sr.getAggregations().get("agg"); long value = agg.getValue();
Cardinality Aggregation
editHere is how you can use Geo Bounds Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
GeoBoundsBuilder aggregation = AggregationBuilders .geoBounds("agg") .field("address.location") .wrapLongitude(true);
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.metrics.geobounds.GeoBounds;
// sr is here your SearchResponse object GeoBounds agg = sr.getAggregations().get("agg"); GeoPoint bottomRight = agg.bottomRight(); GeoPoint topLeft = agg.topLeft(); logger.info("bottomRight {}, topLeft {}", bottomRight, topLeft);
This will basically produce:
bottomRight [40.70500764381921, 13.952946866893775], topLeft [53.49603022435221, -4.190029308156676]
Top Hits Aggregation
editHere is how you can use Top Hits Aggregation with Java API.
Prepare aggregation request
editHere is an example on how to create the aggregation request:
AggregationBuilder aggregation = AggregationBuilders .terms("agg").field("gender") .subAggregation( AggregationBuilders.topHits("top") );
You can use most of the options available for standard search such as from
, size
, sort
, highlight
, explain
…
AggregationBuilder aggregation = AggregationBuilders .terms("agg").field("gender") .subAggregation( AggregationBuilders.topHits("top") .setExplain(true) .setSize(1) .setFrom(10) );
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.tophits.TopHits;
// sr is here your SearchResponse object Terms agg = sr.getAggregations().get("agg"); // For each entry for (Terms.Bucket entry : agg.getBuckets()) { String key = entry.getKey(); // bucket key long docCount = entry.getDocCount(); // Doc count logger.info("key [{}], doc_count [{}]", key, docCount); // We ask for top_hits for each bucket TopHits topHits = entry.getAggregations().get("top"); for (SearchHit hit : topHits.getHits().getHits()) { logger.info(" -> id [{}], _source [{}]", hit.getId(), hit.getSourceAsString()); } }
This will basically produce for the first example:
key [male], doc_count [5107] -> id [AUnzSZze9k7PKXtq04x2], _source [{"gender":"male",...}] -> id [AUnzSZzj9k7PKXtq04x4], _source [{"gender":"male",...}] -> id [AUnzSZzl9k7PKXtq04x5], _source [{"gender":"male",...}] key [female], doc_count [4893] -> id [AUnzSZzM9k7PKXtq04xy], _source [{"gender":"female",...}] -> id [AUnzSZzp9k7PKXtq04x8], _source [{"gender":"female",...}] -> id [AUnzSZ0W9k7PKXtq04yS], _source [{"gender":"female",...}]
Scripted Metric Aggregation
editHere is how you can use Scripted Metric Aggregation with Java API.
Don’t forget to add Groovy in your classpath if you want to run Groovy scripts in an embedded data node
(for unit tests for example).
For example, with Maven, add this dependency to your pom.xml
file:
<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.3.2</version> <classifier>indy</classifier> </dependency>
Prepare aggregation request
editHere is an example on how to create the aggregation request:
MetricsAggregationBuilder aggregation = AggregationBuilders .scriptedMetric("agg") .initScript("_agg['heights'] = []") .mapScript("if (doc['gender'].value == \"male\") " + "{ _agg.heights.add(doc['height'].value) } " + "else " + "{ _agg.heights.add(-1 * doc['height'].value) }");
You can also specify a combine
script which will be executed on each shard:
MetricsAggregationBuilder aggregation = AggregationBuilders .scriptedMetric("agg") .initScript("_agg['heights'] = []") .mapScript("if (doc['gender'].value == \"male\") " + "{ _agg.heights.add(doc['height'].value) } " + "else " + "{ _agg.heights.add(-1 * doc['height'].value) }") .combineScript("heights_sum = 0; for (t in _agg.heights) { heights_sum += t }; return heights_sum");
You can also specify a reduce
script which will be executed on the node which gets the request:
MetricsAggregationBuilder aggregation = AggregationBuilders .scriptedMetric("agg") .initScript("_agg['heights'] = []") .mapScript("if (doc['gender'].value == \"male\") " + "{ _agg.heights.add(doc['height'].value) } " + "else " + "{ _agg.heights.add(-1 * doc['height'].value) }") .combineScript("heights_sum = 0; for (t in _agg.heights) { heights_sum += t }; return heights_sum") .reduceScript("heights_sum = 0; for (a in _aggs) { heights_sum += a }; return heights_sum");
Use aggregation response
editImport Aggregation definition classes:
import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.tophits.TopHits;
// sr is here your SearchResponse object ScriptedMetric agg = sr.getAggregations().get("agg"); Object scriptedResult = agg.aggregation(); logger.info("scriptedResult [{}]", scriptedResult);
Note that the result depends on the script you built. For the first example, this will basically produce:
scriptedResult object [ArrayList] scriptedResult [ { "heights" : [ 1.122218480146643, -1.8148918111233887, -1.7626731575142909, ... ] }, { "heights" : [ -0.8046067304119863, -2.0785486707864553, -1.9183567430207953, ... ] }, { "heights" : [ 2.092635728868694, 1.5697545960886536, 1.8826954461968808, ... ] }, { "heights" : [ -2.1863201099468403, 1.6328549117346856, -1.7078288405893842, ... ] }, { "heights" : [ 1.6043904836424177, -2.0736538674414025, 0.9898266674373053, ... ] } ]
The second example will produce:
scriptedResult object [ArrayList] scriptedResult [-41.279615707402876, -60.88007362339038, 38.823270659734256, 14.840192739445632, 11.300902755741326]
The last example will produce:
scriptedResult object [Double] scriptedResult [2.171917696507009]
On this page
- Min Aggregation
- Prepare aggregation request
- Use aggregation response
- Max Aggregation
- Prepare aggregation request
- Use aggregation response
- Sum Aggregation
- Prepare aggregation request
- Use aggregation response
- Avg Aggregation
- Prepare aggregation request
- Use aggregation response
- Stats Aggregation
- Prepare aggregation request
- Use aggregation response
- Extended Stats Aggregation
- Prepare aggregation request
- Use aggregation response
- Value Count Aggregation
- Prepare aggregation request
- Use aggregation response
- Percentile Aggregation
- Prepare aggregation request
- Use aggregation response
- Percentile Ranks Aggregation
- Prepare aggregation request
- Use aggregation response
- Cardinality Aggregation
- Prepare aggregation request
- Use aggregation response
- Cardinality Aggregation
- Prepare aggregation request
- Use aggregation response
- Top Hits Aggregation
- Prepare aggregation request
- Use aggregation response
- Scripted Metric Aggregation
- Prepare aggregation request
- Use aggregation response