Search code examples
elasticsearchjacksonrest-client

Jackson jsonGenerator generate Elasticsearch query DSL


I am new to Elasticserach and Jackson Json. There is a simple query(search index by a country) I try to use JsonGenerator,

"{\n" +
    "    \"query\" : {\n" +
    "    \"match\": { \"exporting_country\":\"" + countryCode + "\"} \n" +
    "} \n"+
    "}"

JsonGenerator code,

        JsonGenerator jGenerator = jfactory.createGenerator(outputStream);

        jGenerator.writeStartObject();
        jGenerator.writeFieldName("query");

        jGenerator.writeStartObject();

        jGenerator.writeFieldName("match");
        jGenerator.writeStringField("exporting_country", countryCode);

        jGenerator.writeEndObject();
        jGenerator.writeEndObject();
        jGenerator.close();

it throws out an error:

Can not write a field name, expecting a value

Solution

  • You're missing a call to writeStartObject:

        JsonGenerator jGenerator = jfactory.createGenerator(outputStream);
    
        jGenerator.writeStartObject();
        jGenerator.writeFieldName("query");
    
        jGenerator.writeStartObject();
    
        jGenerator.writeFieldName("match");
        jGenerator.writeStartObject();             <--- add this
        jGenerator.writeStringField("exporting_country", countryCode);
        jGenerator.writeEndObject();               <--- and this
    
        jGenerator.writeEndObject();
        jGenerator.writeEndObject();
        jGenerator.close();