public Map<String, Long> countByField(IndexField indexField, FilterBuilder filter) { Map<String, Long> counts = new HashMap<>(); SearchRequestBuilder request = client .prepareSearch(this.getIndexName()) .setTypes(this.getIndexType()) .setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), filter)) .setSize(0) .addAggregation( AggregationBuilders.terms(indexField.field()) .field(indexField.field()) .order(Terms.Order.count(false)) .size(Integer.MAX_VALUE) .minDocCount(0)); SearchResponse response = request.get(); Terms values = response.getAggregations().get(indexField.field()); for (Terms.Bucket value : values.getBuckets()) { counts.put(value.getKey(), value.getDocCount()); } return counts; }
@Override @CheckForNull public Date getLastSynchronization(Map<String, String> params) { SearchRequestBuilder request = client .prepareSearch(this.getIndexName()) .setTypes(this.getIndexType()) .setQuery( QueryBuilders.filteredQuery( QueryBuilders.matchAllQuery(), getLastSynchronizationBuilder(params))) .setSize(0) .addAggregation( AggregationBuilders.max("latest").field(BaseNormalizer.UPDATED_AT_FIELD)); SearchResponse response = request.get(); Max max = response.getAggregations().get("latest"); if (max.getValue() > 0) { Date date = new DateTime((long) max.getValue()).toDate(); LOG.debug( "Index {}:{} has last update of {}", this.getIndexName(), this.getIndexType(), date); return date; } else { LOG.debug("Index {}:{} has no last update date", this.getIndexName(), this.getIndexType()); return null; } }