search #
Executes a search on the collection.
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) #
Arguments | Type | Description |
---|---|---|
body | JSON object | Search request body, using ElasticSearch Query DSL format. If given an empty object, matches all documents in the collection |
options | JSON object | Optional parameters |
callback | function | Callback handling the response |
Options #
Option | Type | Description | Default |
---|---|---|---|
from | number | Provide the starting offset of the request (used to paginate results) | 0 |
queuable | boolean | Make this request queuable or not | true |
scroll | string | Start a scroll session, with a time to live equals to this parameter's value following the Elastisearch time format | undefined |
size | number | Provide the maximum number of results of the request (used to paginate results) | 10 |
Callback Response #
Returns an instance of SearchResult.
Usage #
const
body = {
query: {
bool: {
must: [
{
terms: {status: ['idle', 'wantToHire', 'toHire', 'riding']}
},
{
term: {type: 'cab'}
},
{
geo_distance: {
distance: '10km',
pos: {lat: '48.8566140', lon: '2.352222'}
}
}
]
}
},
sort: [
'status',
{
_geo_distance : {
pos: {lat: '48.8566140', lon: '2.352222'},
order : "asc"
}
},
{date: "desc"}
],
aggregations: {
aggs_name: {
terms: {
field: "field_name"
}
}
}
},
options = {
from: 0,
size: 20
};
// Using callbacks (NodeJS or Web Browser)
kuzzle
.collection('collection', 'index')
.search(body, options, function (err, searchResult) {
searchResult.getDocuments().forEach(function(document) {
console.log(document.toString());
});
});
// Using promises (NodeJS only)
kuzzle
.collection('collection', 'index')
.searchPromise(body, options)
.then(searchResult => {
searchResult.getDocuments().forEach(document => {
console.log(document.toString());
});
});