SDK
SDK Android v3.x
1

You are currently looking at the documentation of a previous version of Kuzzle. We strongly recommend that you use the latest version. You can also use the version selector in the top menu.

search #

Executes a search on the collection.

There is a small delay between the time a document is created and its availability in our search layer (usually a couple of seconds). That means that a document that was just created might not be returned immediately by this function.

Processing large data sets #

When processing a large number of documents (i.e. more than 1000), using search is not always the best option.

Pagination of results can be done by using the from and size but the cost becomes prohibitive when deep pagination is reached. In fact, Elasticsearch, Kuzzle's embedded database, limits results to 10,000 records by default.

Instead, the recommended way to process a large number of documents is to use Collection.scroll or, easier, SearchResult.fetchNext.

See SearchResult.fetchNext for an example of how to process every document of a collection.


search(body, [options], callback) #

ArgumentsTypeDescription
bodyJSON objectSearch request body, using ElasticSearch Query DSL format.
If given an empty object, matches all documents in the collection
optionsJSON objectOptional parameters
callbackfunctionCallback handling the response

Options #

OptionTypeDescriptionDefault
fromnumberProvide the starting offset of the request (used to paginate results)0
queuablebooleanMake this request queuable or nottrue
scrollstringStart a scroll session, with a time to live equals to this parameter's value following the Elastisearch time formatundefined
sizenumberProvide the maximum number of results of the request (used to paginate results)10

To get more information about scroll sessions, please refer to the API reference documentation.


Callback Response #

Returns an instance of SearchResult.

Usage #

import io.kuzzle.sdk.core.Kuzzle;
import io.kuzzle.sdk.core.Options; 
Kuzzle kuzzle = new Kuzzle("localhost");
JSONObject body = new JSONObject()
  .put("query", new JSONObject()
    .put("bool", new JSONObject()
      .put("must", new JSONArray()
        .put(
          new JSONObject().put("terms",
            new JSONObject().put("status",
              new JSONArray()
                .put("idle")
                .put("wantToHire")
                .put("toHire")
                .put("riding")
            )
          )
        )
        .put(
          new JSONObject().put("term",
            new JSONObject()
              .put("type", new JSONArray().put("cab"))
          )
        )
        .put(
          new JSONObject().put("geo_distance",
            new JSONObject()
              .put("distance", "10km")
              .put("pos",
                new JSONObject()
                  .put("lat", "48.8566140")
                  .put("lon", "2.352222")
              )
          )
        )
      )
    )
  )
  .put("sort", new JSONArray()
    .put("status")
    .put(new JSONObject()
      .put("_geo_distance", new JSONObject()
        .put("pos", new JSONObject()
          .put("lat", "48.8566140")
          .put("lon", "2.352222")
        )
        .put('order'; "asc")
      )
    )
    .put(new JSONObject()
      .put("date", "desc")
    )
  )
  .put("aggregations", new JSONObject()
    .put("aggs_name", new JSONObject()
      .put("terms", new JSONObject()
        .put("field", "field_name")
      )
    )
  );
Options options = new Options();
options.setFrom((long) 0);
options.setSize((long) 20);
kuzzle
  .collection("collection", "index")
  .search(body, options, new ResponseListener<SearchResult>() {
    @Override
    public void onSuccess(SearchResult searchResult) {
      for (Document doc : searchResult.getDocuments()) {
        // Get documents
      }
      searchResult.getTotal(); // return total of documents returned
      searchResult.getAggregations(): // return a JSONObject representing the aggregations response
    }
    @Override
    public void onError(JSONObject error) {
      // Handle error
    }
  });