Binary
Binary

Reputation: 57

Missing required property 'Builder.<variant kind>'

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

Answers (2)

Jacu
Jacu

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

Abacus
Abacus

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:

enter image description here

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

Related Questions