Search code examples
elasticsearchelasticsearch-java-apielasticsearch-5

Elasticsearch 5.x setQuery deprecated


I have a question regarding the last version of Elasticsearch.

Until the previous version I was using the following Java API search:

SearchRequestBuilder request = client.prepareSearch(index).setSource(jsonQuery)

Now setSource is deprecated and it is recommended to use setQuery(QueryBuilder) instead.

Is it possible to pass the whole json query as before?

This is the query syntax I was using and I would like to keep if it is possible:

"{"
+ "\"query\": {"
+ "    \"bool\": {"
+ "      \"filter\": { ... }"
+ "     }"
+ "  },"
+ "  \"fields\": ["
+ "    \"xxx\","
+ "  ],"
+ "  \"size\": 1000"
+ "}";

I do not want to split body, fields and size using:

setQuery(QueryBuilders.wrapperQuery(jsonQuery)).setSize(size).storedFields(fields)

Solution

  • Yes, you can use QueryBuilders.wrapperQuery() which will create an instance of WrapperQueryBuilder in order to achieve this:

    SearchRequestBuilder request = client.prepareSearch(index)
        .setQuery(QueryBuilders.wrapperQuery(jsonQuery))
        .setSize(1000)
        .fields("xxx1", "xxx2");