Reputation: 57
public void getMaxMinPrice(String category, String subcategory) {
var nativeQueryBuilder = new NativeQueryBuilder();
nativeQueryBuilder.withQuery(queryBuilder ->
queryBuilder.bool(boolBuilder ->
boolBuilder.must(mustBuilder -> {
if (category != null) {
mustBuilder.term(termBuilder -> termBuilder.field("category.keyword").value(category));
}
if (subcategory != null) {
mustBuilder.term(termBuilder -> termBuilder.field("subcategory.keyword").value(subcategory));
}
return mustBuilder;
})));
nativeQueryBuilder.withAggregation("max_price", Aggregation.of(aggBuilder ->
aggBuilder.max(maxBuilder -> maxBuilder.field("price"))));
nativeQueryBuilder.withAggregation("min_price", Aggregation.of(aggBuilder ->
aggBuilder.min(minBuilder -> minBuilder.field("price"))));
}
The exception is thrown somewhere in the nativeQueryBuilder.withQuery method. I am using ElasticSearch Template.
Upvotes: 1
Views: 1543
Reputation: 61
In my case it was a problem with using .term()
method with null
value. According to your example you should make sure that category
and subcategory
is not null.
Upvotes: 1
Reputation: 19471
This is not reproducible for me. I put your code in a small scratch program and added one more variable (query
) to out a breakpoint on:
import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
import org.springframework.data.elasticsearch.client.elc.NativeQueryBuilder;
class Scratch {
public static void main(String[] args) {
var scratch = new Scratch();
scratch.getMaxMinPrice("category", "subcategory");
}
public void getMaxMinPrice(String category, String subcategory) {
var nativeQueryBuilder = new NativeQueryBuilder();
nativeQueryBuilder.withQuery(queryBuilder -> queryBuilder.bool(boolBuilder -> boolBuilder.must(mustBuilder -> {
if (category != null) {
mustBuilder.term(termBuilder -> termBuilder.field("category.keyword").value(category));
}
if (subcategory != null) {
mustBuilder.term(termBuilder -> termBuilder.field("subcategory.keyword").value(subcategory));
}
return mustBuilder;
})));
nativeQueryBuilder.withAggregation("max_price",
Aggregation.of(aggBuilder -> aggBuilder.max(maxBuilder -> maxBuilder.field("price"))));
nativeQueryBuilder.withAggregation("min_price",
Aggregation.of(aggBuilder -> aggBuilder.min(minBuilder -> minBuilder.field("price"))));
var query = nativeQueryBuilder.build();
query.getQuery();
}
}
Stopping at the line with query.getQuery
and inspecting the query
variable, everything is set up correct, no error:
So the error you see must be coming from somewhere else. I use the current released 5.0 version.
Put a debugger breakpoint on the exception creation and see where this error comes from.
Upvotes: 0