Skip to content

Reintroduce sub-aggregations for bucket aggs #6616

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,17 @@ public override AdjacencyMatrixAggregation Read(ref Utf8JsonReader reader, Type

continue;
}

if (reader.ValueTextEquals("aggs") || reader.ValueTextEquals("aggregations"))
{
var value = JsonSerializer.Deserialize<AggregationDictionary>(ref reader, options);
if (value is not null)
{
agg.Aggregations = value;
}

continue;
}
}
}

Expand All @@ -91,6 +102,12 @@ public override void Write(Utf8JsonWriter writer, AdjacencyMatrixAggregation val
JsonSerializer.Serialize(writer, value.Meta, options);
}

if (value.Aggregations is not null)
{
writer.WritePropertyName("aggregations");
JsonSerializer.Serialize(writer, value.Aggregations, options);
}

writer.WriteEndObject();
}
}
Expand All @@ -103,24 +120,147 @@ internal AdjacencyMatrixAggregation()
{
}

public Elastic.Clients.Elasticsearch.Aggregations.AggregationDictionary? Aggregations { get; set; }

public Dictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>? Filters { get; set; }

public Dictionary<string, object>? Meta { get; set; }

public override string? Name { get; internal set; }
}

public sealed partial class AdjacencyMatrixAggregationDescriptor<TDocument> : SerializableDescriptorBase<AdjacencyMatrixAggregationDescriptor<TDocument>>
{
internal AdjacencyMatrixAggregationDescriptor(Action<AdjacencyMatrixAggregationDescriptor<TDocument>> configure) => configure.Invoke(this);
public AdjacencyMatrixAggregationDescriptor() : base()
{
}

private Elastic.Clients.Elasticsearch.Aggregations.AggregationDictionary? AggregationsValue { get; set; }

private Elastic.Clients.Elasticsearch.Aggregations.AggregationContainerDescriptor<TDocument> AggregationsDescriptor { get; set; }

private Action<Elastic.Clients.Elasticsearch.Aggregations.AggregationContainerDescriptor<TDocument>> AggregationsDescriptorAction { get; set; }

private Dictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>? FiltersValue { get; set; }

private Dictionary<string, object>? MetaValue { get; set; }

public AdjacencyMatrixAggregationDescriptor<TDocument> Aggregations(Elastic.Clients.Elasticsearch.Aggregations.AggregationDictionary? aggregations)
{
AggregationsDescriptor = null;
AggregationsDescriptorAction = null;
AggregationsValue = aggregations;
return Self;
}

public AdjacencyMatrixAggregationDescriptor<TDocument> Aggregations(Elastic.Clients.Elasticsearch.Aggregations.AggregationContainerDescriptor<TDocument> descriptor)
{
AggregationsValue = null;
AggregationsDescriptorAction = null;
AggregationsDescriptor = descriptor;
return Self;
}

public AdjacencyMatrixAggregationDescriptor<TDocument> Aggregations(Action<Elastic.Clients.Elasticsearch.Aggregations.AggregationContainerDescriptor<TDocument>> configure)
{
AggregationsValue = null;
AggregationsDescriptor = null;
AggregationsDescriptorAction = configure;
return Self;
}

public AdjacencyMatrixAggregationDescriptor<TDocument> Filters(Func<FluentDictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>, FluentDictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>> selector)
{
FiltersValue = selector?.Invoke(new FluentDictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>());
return Self;
}

public AdjacencyMatrixAggregationDescriptor<TDocument> Meta(Func<FluentDictionary<string, object>, FluentDictionary<string, object>> selector)
{
MetaValue = selector?.Invoke(new FluentDictionary<string, object>());
return Self;
}

protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions options, IElasticsearchClientSettings settings)
{
writer.WriteStartObject();
writer.WritePropertyName("adjacency_matrix");
writer.WriteStartObject();
if (FiltersValue is not null)
{
writer.WritePropertyName("filters");
JsonSerializer.Serialize(writer, FiltersValue, options);
}

writer.WriteEndObject();
if (MetaValue is not null)
{
writer.WritePropertyName("meta");
JsonSerializer.Serialize(writer, MetaValue, options);
}

if (AggregationsDescriptor is not null)
{
writer.WritePropertyName("aggregations");
JsonSerializer.Serialize(writer, AggregationsDescriptor, options);
}
else if (AggregationsDescriptorAction is not null)
{
writer.WritePropertyName("aggregations");
JsonSerializer.Serialize(writer, new AggregationContainerDescriptor<TDocument>(AggregationsDescriptorAction), options);
}
else if (AggregationsValue is not null)
{
writer.WritePropertyName("aggregations");
JsonSerializer.Serialize(writer, AggregationsValue, options);
}

writer.WriteEndObject();
}
}

public sealed partial class AdjacencyMatrixAggregationDescriptor : SerializableDescriptorBase<AdjacencyMatrixAggregationDescriptor>
{
internal AdjacencyMatrixAggregationDescriptor(Action<AdjacencyMatrixAggregationDescriptor> configure) => configure.Invoke(this);
public AdjacencyMatrixAggregationDescriptor() : base()
{
}

private Elastic.Clients.Elasticsearch.Aggregations.AggregationDictionary? AggregationsValue { get; set; }

private Elastic.Clients.Elasticsearch.Aggregations.AggregationContainerDescriptor AggregationsDescriptor { get; set; }

private Action<Elastic.Clients.Elasticsearch.Aggregations.AggregationContainerDescriptor> AggregationsDescriptorAction { get; set; }

private Dictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>? FiltersValue { get; set; }

private Dictionary<string, object>? MetaValue { get; set; }

public AdjacencyMatrixAggregationDescriptor Aggregations(Elastic.Clients.Elasticsearch.Aggregations.AggregationDictionary? aggregations)
{
AggregationsDescriptor = null;
AggregationsDescriptorAction = null;
AggregationsValue = aggregations;
return Self;
}

public AdjacencyMatrixAggregationDescriptor Aggregations(Elastic.Clients.Elasticsearch.Aggregations.AggregationContainerDescriptor descriptor)
{
AggregationsValue = null;
AggregationsDescriptorAction = null;
AggregationsDescriptor = descriptor;
return Self;
}

public AdjacencyMatrixAggregationDescriptor Aggregations(Action<Elastic.Clients.Elasticsearch.Aggregations.AggregationContainerDescriptor> configure)
{
AggregationsValue = null;
AggregationsDescriptor = null;
AggregationsDescriptorAction = configure;
return Self;
}

public AdjacencyMatrixAggregationDescriptor Filters(Func<FluentDictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>, FluentDictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>> selector)
{
FiltersValue = selector?.Invoke(new FluentDictionary<string, Elastic.Clients.Elasticsearch.QueryDsl.QueryContainer>());
Expand Down Expand Up @@ -151,6 +291,22 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o
JsonSerializer.Serialize(writer, MetaValue, options);
}

if (AggregationsDescriptor is not null)
{
writer.WritePropertyName("aggregations");
JsonSerializer.Serialize(writer, AggregationsDescriptor, options);
}
else if (AggregationsDescriptorAction is not null)
{
writer.WritePropertyName("aggregations");
JsonSerializer.Serialize(writer, new AggregationContainerDescriptor(AggregationsDescriptorAction), options);
}
else if (AggregationsValue is not null)
{
writer.WritePropertyName("aggregations");
JsonSerializer.Serialize(writer, AggregationsValue, options);
}

writer.WriteEndObject();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ public AggregationContainerDescriptor() : base()
{
}

public AggregationContainerDescriptor<TDocument> AdjacencyMatrix(string name, Action<AdjacencyMatrixAggregationDescriptor> configure)
public AggregationContainerDescriptor<TDocument> AdjacencyMatrix(string name, Action<AdjacencyMatrixAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("adjacency_matrix", configure));
}
Expand All @@ -315,12 +315,12 @@ public AggregationContainerDescriptor<TDocument> Cardinality(string name, Action
return SetContainer(name, AggregationContainer.CreateWithAction("cardinality", configure));
}

public AggregationContainerDescriptor<TDocument> Children(string name, Action<ChildrenAggregationDescriptor> configure)
public AggregationContainerDescriptor<TDocument> Children(string name, Action<ChildrenAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("children", configure));
}

public AggregationContainerDescriptor<TDocument> Composite(string name, Action<CompositeAggregationDescriptor> configure)
public AggregationContainerDescriptor<TDocument> Composite(string name, Action<CompositeAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("composite", configure));
}
Expand Down Expand Up @@ -355,12 +355,12 @@ public AggregationContainerDescriptor<TDocument> ExtendedStatsBucket(string name
return SetContainer(name, AggregationContainer.CreateWithAction("extended_stats_bucket", configure));
}

public AggregationContainerDescriptor<TDocument> Filters(string name, Action<FiltersAggregationDescriptor> configure)
public AggregationContainerDescriptor<TDocument> Filters(string name, Action<FiltersAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("filters", configure));
}

public AggregationContainerDescriptor<TDocument> Global(string name, Action<GlobalAggregationDescriptor> configure)
public AggregationContainerDescriptor<TDocument> Global(string name, Action<GlobalAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("global", configure));
}
Expand Down Expand Up @@ -415,7 +415,7 @@ public AggregationContainerDescriptor<TDocument> Nested(string name, Action<Nest
return SetContainer(name, AggregationContainer.CreateWithAction("nested", configure));
}

public AggregationContainerDescriptor<TDocument> Parent(string name, Action<ParentAggregationDescriptor> configure)
public AggregationContainerDescriptor<TDocument> Parent(string name, Action<ParentAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("parent", configure));
}
Expand All @@ -440,7 +440,7 @@ public AggregationContainerDescriptor<TDocument> ReverseNested(string name, Acti
return SetContainer(name, AggregationContainer.CreateWithAction("reverse_nested", configure));
}

public AggregationContainerDescriptor<TDocument> Sampler(string name, Action<SamplerAggregationDescriptor> configure)
public AggregationContainerDescriptor<TDocument> Sampler(string name, Action<SamplerAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("sampler", configure));
}
Expand Down Expand Up @@ -518,6 +518,11 @@ public AggregationContainerDescriptor AdjacencyMatrix(string name, Action<Adjace
return SetContainer(name, AggregationContainer.CreateWithAction("adjacency_matrix", configure));
}

public AggregationContainerDescriptor AdjacencyMatrix<TDocument>(string name, Action<AdjacencyMatrixAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("adjacency_matrix", configure));
}

public AggregationContainerDescriptor AutoDateHistogram(string name, Action<AutoDateHistogramAggregationDescriptor> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("auto_date_histogram", configure));
Expand Down Expand Up @@ -563,11 +568,21 @@ public AggregationContainerDescriptor Children(string name, Action<ChildrenAggre
return SetContainer(name, AggregationContainer.CreateWithAction("children", configure));
}

public AggregationContainerDescriptor Children<TDocument>(string name, Action<ChildrenAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("children", configure));
}

public AggregationContainerDescriptor Composite(string name, Action<CompositeAggregationDescriptor> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("composite", configure));
}

public AggregationContainerDescriptor Composite<TDocument>(string name, Action<CompositeAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("composite", configure));
}

public AggregationContainerDescriptor CumulativeCardinality(string name, Action<CumulativeCardinalityAggregationDescriptor> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("cumulative_cardinality", configure));
Expand Down Expand Up @@ -618,11 +633,21 @@ public AggregationContainerDescriptor Filters(string name, Action<FiltersAggrega
return SetContainer(name, AggregationContainer.CreateWithAction("filters", configure));
}

public AggregationContainerDescriptor Filters<TDocument>(string name, Action<FiltersAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("filters", configure));
}

public AggregationContainerDescriptor Global(string name, Action<GlobalAggregationDescriptor> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("global", configure));
}

public AggregationContainerDescriptor Global<TDocument>(string name, Action<GlobalAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("global", configure));
}

public AggregationContainerDescriptor Histogram(string name, Action<HistogramAggregationDescriptor> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("histogram", configure));
Expand Down Expand Up @@ -728,6 +753,11 @@ public AggregationContainerDescriptor Parent(string name, Action<ParentAggregati
return SetContainer(name, AggregationContainer.CreateWithAction("parent", configure));
}

public AggregationContainerDescriptor Parent<TDocument>(string name, Action<ParentAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("parent", configure));
}

public AggregationContainerDescriptor PercentilesBucket(string name, Action<PercentilesBucketAggregationDescriptor> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("percentiles_bucket", configure));
Expand Down Expand Up @@ -768,6 +798,11 @@ public AggregationContainerDescriptor Sampler(string name, Action<SamplerAggrega
return SetContainer(name, AggregationContainer.CreateWithAction("sampler", configure));
}

public AggregationContainerDescriptor Sampler<TDocument>(string name, Action<SamplerAggregationDescriptor<TDocument>> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("sampler", configure));
}

public AggregationContainerDescriptor ScriptedMetric(string name, Action<ScriptedMetricAggregationDescriptor> configure)
{
return SetContainer(name, AggregationContainer.CreateWithAction("scripted_metric", configure));
Expand Down
Loading