NOTE: You are looking at documentation for an older release. For the latest information, see the current release documentation.
Bulk
editBulk
editThe bulk
API makes it possible to perform many index/delete operations in a single API call.
This can greatly increase the indexing speed.
'use strict' require('array.prototype.flatmap').shim() const { Client } = require('@elastic/elasticsearch') const client = new Client({ node: 'http://localhost:9200' }) async function run () { await client.indices.create({ index: 'tweets', body: { mappings: { properties: { id: { type: 'integer' }, text: { type: 'text' }, user: { type: 'keyword' }, time: { type: 'date' } } } } }, { ignore: [400] }) const dataset = [{ id: 1, text: 'If I fall, don\'t bring me back.', user: 'jon', date: new Date() }, { id: 2, text: 'Witer is coming', user: 'ned', date: new Date() }, { id: 3, text: 'A Lannister always pays his debts.', user: 'tyrion', date: new Date() }, { id: 4, text: 'I am the blood of the dragon.', user: 'daenerys', date: new Date() }, { id: 5, // change this value to a string to see the bulk response with errors text: 'A girl is Arya Stark of Winterfell. And I\'m going home.', user: 'arya', date: new Date() }] const body = dataset.flatMap(doc => [{ index: { _index: 'tweets' } }, doc]) const { body: bulkResponse } = await client.bulk({ refresh: true, body }) if (bulkResponse.errors) { const erroredDocuments = [] // The items array has the same order of the dataset we just indexed. // The presence of the `error` key indicates that the operation // that we did for the document has failed. bulkResponse.items.forEach((action, i) => { const operation = Object.keys(action)[0] if (action[operation].error) { erroredDocuments.push({ // If the status is 429 it means that you can retry the document, // otherwise it's very likely a mapping error, and you should // fix the document before to try it again. status: action[operation].status, error: action[operation].error, operation: body[i * 2], document: body[i * 2 + 1] }) } }) console.log(erroredDocuments) } const { body: count } = await client.count({ index: 'tweets' }) console.log(count) } run().catch(console.log)