More update to support Reducer Builders

This commit is contained in:
Colin Goodheart-Smithe 2015-02-16 16:32:42 +00:00
parent c97dd84bad
commit 511e275825
5 changed files with 31 additions and 5 deletions

View File

@ -20,12 +20,14 @@
package org.elasticsearch.search.aggregations; package org.elasticsearch.search.aggregations;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.elasticsearch.ElasticsearchGenerationException; import org.elasticsearch.ElasticsearchGenerationException;
import org.elasticsearch.client.Requests; import org.elasticsearch.client.Requests;
import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesArray;
import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.search.aggregations.reducers.ReducerBuilder;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
@ -37,6 +39,7 @@ import java.util.Map;
public abstract class AggregationBuilder<B extends AggregationBuilder<B>> extends AbstractAggregationBuilder { public abstract class AggregationBuilder<B extends AggregationBuilder<B>> extends AbstractAggregationBuilder {
private List<AbstractAggregationBuilder> aggregations; private List<AbstractAggregationBuilder> aggregations;
private List<ReducerBuilder<?>> reducers;
private BytesReference aggregationsBinary; private BytesReference aggregationsBinary;
private Map<String, Object> metaData; private Map<String, Object> metaData;
@ -59,6 +62,18 @@ public abstract class AggregationBuilder<B extends AggregationBuilder<B>> extend
return (B) this; return (B) this;
} }
/**
* Add a sub get to this bucket get.
*/
@SuppressWarnings("unchecked")
public B subAggregation(ReducerBuilder<?> reducer) {
if (reducers == null) {
reducers = Lists.newArrayList();
}
reducers.add(reducer);
return (B) this;
}
/** /**
* Sets a raw (xcontent / json) sub addAggregation. * Sets a raw (xcontent / json) sub addAggregation.
*/ */
@ -120,7 +135,7 @@ public abstract class AggregationBuilder<B extends AggregationBuilder<B>> extend
builder.field(type); builder.field(type);
internalXContent(builder, params); internalXContent(builder, params);
if (aggregations != null || aggregationsBinary != null) { if (aggregations != null || aggregationsBinary != null || reducers != null) {
builder.startObject("aggregations"); builder.startObject("aggregations");
if (aggregations != null) { if (aggregations != null) {
@ -129,6 +144,12 @@ public abstract class AggregationBuilder<B extends AggregationBuilder<B>> extend
} }
} }
if (reducers != null) {
for (ReducerBuilder<?> subAgg : reducers) {
subAgg.toXContent(builder, params);
}
}
if (aggregationsBinary != null) { if (aggregationsBinary != null) {
if (XContentFactory.xContentType(aggregationsBinary) == builder.contentType()) { if (XContentFactory.xContentType(aggregationsBinary) == builder.contentType()) {
builder.rawField("aggregations", aggregationsBinary); builder.rawField("aggregations", aggregationsBinary);

View File

@ -57,6 +57,7 @@ import org.elasticsearch.search.aggregations.metrics.stats.extended.InternalExte
import org.elasticsearch.search.aggregations.metrics.sum.InternalSum; import org.elasticsearch.search.aggregations.metrics.sum.InternalSum;
import org.elasticsearch.search.aggregations.metrics.tophits.InternalTopHits; import org.elasticsearch.search.aggregations.metrics.tophits.InternalTopHits;
import org.elasticsearch.search.aggregations.metrics.valuecount.InternalValueCount; import org.elasticsearch.search.aggregations.metrics.valuecount.InternalValueCount;
import org.elasticsearch.search.aggregations.reducers.InternalSimpleValue;
import org.elasticsearch.search.aggregations.reducers.derivative.DerivativeReducer; import org.elasticsearch.search.aggregations.reducers.derivative.DerivativeReducer;
/** /**
@ -103,6 +104,7 @@ public class TransportAggregationModule extends AbstractModule implements SpawnM
InternalTopHits.registerStreams(); InternalTopHits.registerStreams();
InternalGeoBounds.registerStream(); InternalGeoBounds.registerStream();
InternalChildren.registerStream(); InternalChildren.registerStream();
InternalSimpleValue.registerStreams();
// Reducers // Reducers
DerivativeReducer.registerStreams(); DerivativeReducer.registerStreams();

View File

@ -301,6 +301,10 @@ public class InternalHistogram<B extends InternalHistogram.Bucket> extends Inter
return factory; return factory;
} }
public InternalOrder getOrder() {
return order;
}
private static class IteratorAndCurrent<B> { private static class IteratorAndCurrent<B> {
private final Iterator<B> iterator; private final Iterator<B> iterator;

View File

@ -29,7 +29,7 @@ import java.util.Comparator;
/** /**
* An internal {@link Histogram.Order} strategy which is identified by a unique id. * An internal {@link Histogram.Order} strategy which is identified by a unique id.
*/ */
class InternalOrder extends Histogram.Order { public class InternalOrder extends Histogram.Order {
final byte id; final byte id;
final String key; final String key;

View File

@ -23,7 +23,6 @@ import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilder;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -33,7 +32,7 @@ public abstract class ReducerBuilder<B extends ReducerBuilder<B>> implements ToX
private final String name; private final String name;
protected final String type; protected final String type;
private List<String> bucketsPaths; private String[] bucketsPaths;
private Map<String, Object> metaData; private Map<String, Object> metaData;
/** /**
@ -54,7 +53,7 @@ public abstract class ReducerBuilder<B extends ReducerBuilder<B>> implements ToX
/** /**
* Sets the paths to the buckets to use for this reducer * Sets the paths to the buckets to use for this reducer
*/ */
public B setBucketsPaths(List<String> bucketsPaths) { public B setBucketsPaths(String... bucketsPaths) {
this.bucketsPaths = bucketsPaths; this.bucketsPaths = bucketsPaths;
return (B) this; return (B) this;
} }