Skip to content

Commit 9b425ae

Browse files
committed
feat: add where-filter to aggregations
1 parent b269b31 commit 9b425ae

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/main/java/io/weaviate/client6/v1/api/collections/aggregate/Aggregation.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
import java.util.List;
66
import java.util.function.Function;
77

8+
import io.weaviate.client6.v1.api.collections.query.Filter;
89
import io.weaviate.client6.v1.internal.ObjectBuilder;
910
import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate;
11+
import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBase;
1012

1113
public record Aggregation(
1214
AggregateObjectFilter filter,
15+
Filter whereFilter,
1316
Integer objectLimit,
1417
boolean includeTotalCount,
1518
List<PropertyAggregation> returnMetrics) {
@@ -29,6 +32,7 @@ public static Aggregation of(AggregateObjectFilter objectFilter, Function<Builde
2932
public Aggregation(Builder builder) {
3033
this(
3134
builder.objectFilter,
35+
builder.whereFilter,
3236
builder.objectLimit,
3337
builder.includeTotalCount,
3438
builder.metrics);
@@ -41,6 +45,7 @@ public Builder(AggregateObjectFilter objectFilter) {
4145
this.objectFilter = objectFilter;
4246
}
4347

48+
private Filter whereFilter;
4449
private List<PropertyAggregation> metrics = new ArrayList<>();
4550
private Integer objectLimit;
4651
private boolean includeTotalCount = false;
@@ -55,6 +60,24 @@ public final Builder includeTotalCount(boolean include) {
5560
return this;
5661
}
5762

63+
/**
64+
* Filter result set using traditional filtering operators: {@code eq},
65+
* {@code gte}, {@code like}, etc.
66+
* Subsequent calls to {@link #filter} aggregate with an AND operator.
67+
*/
68+
public final Builder filters(Filter filter) {
69+
this.whereFilter = this.whereFilter == null
70+
? filter
71+
: Filter.and(this.whereFilter, filter);
72+
return this;
73+
}
74+
75+
/** Combine several conditions using with an AND operator. */
76+
public final Builder filters(Filter... filters) {
77+
Arrays.stream(filters).map(this::filters);
78+
return this;
79+
}
80+
5881
@SafeVarargs
5982
public final Builder metrics(PropertyAggregation... metrics) {
6083
this.metrics = Arrays.asList(metrics);
@@ -80,6 +103,12 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) {
80103
req.setObjectLimit(objectLimit);
81104
}
82105

106+
if (whereFilter != null) {
107+
var protoFilters = WeaviateProtoBase.Filters.newBuilder();
108+
whereFilter.appendTo(protoFilters);
109+
req.setFilters(protoFilters);
110+
}
111+
83112
for (final var metric : returnMetrics) {
84113
var aggregation = WeaviateProtoAggregate.AggregateRequest.Aggregation.newBuilder();
85114
metric.appendTo(aggregation);

src/main/java/io/weaviate/client6/v1/api/collections/query/BaseQueryOptions.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,9 @@ protected SelfT generate(Function<GenerativeSearch.Builder, ObjectBuilder<Genera
131131
* Subsequent calls to {@link #filter} aggregate with an AND operator.
132132
*/
133133
public final SelfT filters(Filter filter) {
134-
this.filter = this.filter == null ? filter : Filter.and(this.filter, filter);
134+
this.filter = this.filter == null
135+
? filter
136+
: Filter.and(this.filter, filter);
135137
return (SelfT) this;
136138
}
137139

0 commit comments

Comments
 (0)