transport.requestedit

It can happen that you need to communicate with Elasticsearch by using an API that is not supported by the client, to mitigate this issue you can directly call client.transport.request, which is the internal utility that the client uses to communicate with Elasticsearch when you use an API method.

When using the transport.request method you must provide all the parameters needed to perform an HTTP call, such as method, path, querystring, and body.

If you find yourself use this method too often, take in consideration the use of client.extend, which will make your code look cleaner and easier to maintain.

'use strict'

const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })

async function run () {
  const { body: bulkResponse } = await client.bulk({
    refresh: true,
    body: [
      { index: { _index: 'game-of-thrones' } },
      {
        character: 'Ned Stark',
        quote: 'Winter is coming.'
      },

      { index: { _index: 'game-of-thrones' } },
      {
        character: 'Daenerys Targaryen',
        quote: 'I am the blood of the dragon.'
      },

      { index: { _index: 'game-of-thrones' } },
      {
        character: 'Tyrion Lannister',
        quote: 'A mind needs books like a sword needs a whetstone.'
      }
    ]
  })

  if (bulkResponse.errors) {
    console.log(bulkResponse)
    process.exit(1)
  }

  const { body } = await client.transport.request({
    method: 'POST',
    path: '/game-of-thrones/_search',
    body: {
      query: {
        match: {
          quote: 'winter'
        }
      }
    },
    querystring: {}
  })

  console.log(body)
}

run().catch(console.log)