Search code examples
elasticsearchelasticsearch-jest

retrieving specific fileds using JestClient in elastic Serach


I have the following document stored in elastic search

{"Book_Id" : "102" ,"Book_Name" : "Alice in wonderLand", "Review_Text" :"DescentRead","Rating_Percentage" :"100" }'
{"Book_Id" : "102" ,"Book_Name" : "Alice in wonderLand", "Review_Text" :"For Kids","Rating_Percentage" :"50" }'
{"Book_Id" : "103" ,"Book_Name" : "Blah Blah", "Review_Text" :"Great","Rating_Percentage" :"100" }'

I want to do a search and retrieve only one field(Review Text in this example) as an out put.I am using the following code

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();  
searchSourceBuilder.query(QueryBuilders.matchQuery("Book_Id", "102"))
        .fields("_source.Review_Text");
Search search = new Search.Builder(searchSourceBuilder.toString())
                .addIndex("reviews")
                .addType("bookreview")
                .build();

SearchResult result = client.execute(search);

But I keep getting the error -

{"error":{"root_cause":[{"type":"parsing_exception","reason":"Deprecated field [fields] used, expected [stored_fields] instead","line":10,"col":14}],

what is missing here ? How else do we retrieve only specific fileds instead of all the fields as Json

Thanks Shabna


Solution

  • Accessing fields directly is deprecated as described in the error message. Use source filtering instead:

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();  
    searchSourceBuilder.query(QueryBuilders.matchQuery("Book_Id", "102"))
            .fetchSource("Review_Text", null);                    <-- change this line
    Search search = new Search.Builder(searchSourceBuilder.toString())
                    .addIndex("reviews")
                    .addType("bookreview")
                    .build();