Update docs for v8 (#1572)

This commit is contained in:
Tomas Della Vedova
2022-02-11 10:23:07 +01:00
committed by GitHub
parent a0c5c98a99
commit 759138c375
37 changed files with 315 additions and 1264 deletions

View File

@ -12,9 +12,9 @@ const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })
async function run () {
const { body: bulkResponse } = await client.bulk({
const bulkResponse = await client.bulk({
refresh: true,
body: [
operations: [
// operation to perform
{ index: { _index: 'game-of-thrones' } },
// the document to index
@ -43,13 +43,11 @@ async function run () {
}
// Let's search!
const { body } = await client.search({
const result = await client.search({
index: 'game-of-thrones',
body: {
query: {
match: {
quote: 'winter'
}
query: {
match: {
quote: 'winter'
}
}
}, {
@ -59,17 +57,17 @@ async function run () {
// stream async iteration, available in Node.js ≥ 10
let payload = ''
body.setEncoding('utf8')
for await (const chunk of body) {
for await (const chunk of result) {
payload += chunk
}
console.log(JSON.parse(payload))
// classic stream callback style
let payload = ''
body.setEncoding('utf8')
body.on('data', chunk => { payload += chunk })
body.on('error', console.log)
body.on('end', () => {
result.setEncoding('utf8')
result.on('data', chunk => { payload += chunk })
result.on('error', console.log)
result.on('end', () => {
console.log(JSON.parse(payload))
})
}
@ -91,9 +89,10 @@ const fastify = require('fastify')()
fastify.post('/search/:index', async (req, reply) => {
const { body, statusCode, headers } = await client.search({
index: req.params.index,
body: req.body
...req.body
}, {
asStream: true
asStream: true,
meta: true
})
reply.code(statusCode).headers(headers)

View File

@ -19,7 +19,7 @@ const client = new Client({
async function run () {
await client.indices.create({
index: 'tweets',
body: {
operations: {
mappings: {
properties: {
id: { type: 'integer' },
@ -58,9 +58,9 @@ async function run () {
date: new Date()
}]
const body = dataset.flatMap(doc => [{ index: { _index: 'tweets' } }, doc])
const operations = dataset.flatMap(doc => [{ index: { _index: 'tweets' } }, doc])
const { body: bulkResponse } = await client.bulk({ refresh: true, body })
const bulkResponse = await client.bulk({ refresh: true, operations })
if (bulkResponse.errors) {
const erroredDocuments = []
@ -84,7 +84,7 @@ async function run () {
console.log(erroredDocuments)
}
const { body: count } = await client.count({ index: 'tweets' })
const count = await client.count({ index: 'tweets' })
console.log(count)
}

View File

@ -16,18 +16,18 @@ async function run () {
await client.index({
index: 'game-of-thrones',
id: '1',
body: {
document: {
character: 'Ned Stark',
quote: 'Winter is coming.'
}
})
const { body } = await client.exists({
const exists = await client.exists({
index: 'game-of-thrones',
id: 1
})
console.log(body) // true
console.log(exists) // true
}
run().catch(console.log)

View File

@ -16,18 +16,18 @@ async function run () {
await client.index({
index: 'game-of-thrones',
id: '1',
body: {
document: {
character: 'Ned Stark',
quote: 'Winter is coming.'
}
})
const { body } = await client.get({
const document = await client.get({
index: 'game-of-thrones',
id: '1'
})
console.log(body)
console.log(document)
}
run().catch(console.log)

View File

@ -11,9 +11,9 @@ const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })
async function run () {
const { body: bulkResponse } = await client.bulk({
const bulkResponse = await client.bulk({
refresh: true,
body: [
operations: [
// operation to perform
{ index: { _index: 'game-of-thrones' } },
// the document to index
@ -42,7 +42,7 @@ async function run () {
}
// Let's search!
const { body } = await client.search({
const result = await client.search({
index: 'game-of-thrones',
body: {
query: {
@ -55,7 +55,7 @@ async function run () {
ignore: [404]
})
console.log(body) // ResponseError
console.log(result) // ResponseError
}
run().catch(console.log)

View File

@ -17,7 +17,6 @@ Following you can find some examples on how to use the client.
* Executing a <<search_examples,search>> request;
* I need <<suggest_examples,suggestions>>;
* How to use the <<transport_request_examples,transport.request>> method;
* How to use <<typescript_examples,TypeScript>>;
include::asStream.asciidoc[]
include::bulk.asciidoc[]
@ -29,7 +28,6 @@ include::scroll.asciidoc[]
include::search.asciidoc[]
include::suggest.asciidoc[]
include::transport.request.asciidoc[]
include::typescript.asciidoc[]
include::sql.query.asciidoc[]
include::update.asciidoc[]
include::update_by_query.asciidoc[]

View File

@ -12,9 +12,9 @@ const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })
async function run () {
const { body: bulkResponse } = await client.bulk({
const bulkResponse = await client.bulk({
refresh: true,
body: [
operations: [
{ index: { _index: 'game-of-thrones' } },
{
character: 'Ned Stark',
@ -40,8 +40,8 @@ async function run () {
process.exit(1)
}
const { body } = await client.msearch({
body: [
const result = await client.msearch({
searches: [
{ index: 'game-of-thrones' },
{ query: { match: { character: 'Daenerys' } } },
@ -50,7 +50,7 @@ async function run () {
]
})
console.log(body.responses)
console.log(result.responses)
}
run().catch(console.log)

View File

@ -70,17 +70,15 @@ module.exports = async (req, res) => {
// expose you to the risk that a malicious user
// could overload your cluster by crafting
// expensive queries.
body: {
_source: ['id', 'url', 'name'], // the fields you want to show in the autocompletion
size: 0,
// https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html
suggest: {
suggestions: {
prefix: req.query.q,
completion: {
field: 'suggest',
size: 5
}
_source: ['id', 'url', 'name'], // the fields you want to show in the autocompletion
size: 0,
// https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html
suggest: {
suggestions: {
prefix: req.query.q,
completion: {
field: 'suggest',
size: 5
}
}
}
@ -93,7 +91,7 @@ module.exports = async (req, res) => {
// It might be useful to configure http control caching headers
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
// res.setHeader('stale-while-revalidate', '30')
res.json(response.body)
res.json(response)
} catch (err) {
res.status(err.statusCode || 500)
res.json({

View File

@ -62,7 +62,7 @@ module.exports = async (req, res) => {
}
})
res.json(response.body)
res.json(response)
} catch (err) {
res.status(err.statusCode || 500)
res.json({

View File

@ -56,11 +56,12 @@ module.exports = async (req, res) => {
const response = await client.index({
index: INDEX,
id: req.query.id,
body: req.body
document: req.body
}, {
headers: {
Authorization: `ApiKey ${token}`
}
},
meta: true
})
res.status(response.statusCode)

View File

@ -60,10 +60,8 @@ module.exports = async (req, res) => {
// expose you to the risk that a malicious user
// could overload your cluster by crafting
// expensive queries.
body: {
query: {
match: { field: req.body.text }
}
query: {
match: { field: req.body.text }
}
}, {
headers: {
@ -74,7 +72,7 @@ module.exports = async (req, res) => {
// It might be useful to configure http control caching headers
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
// res.setHeader('stale-while-revalidate', '30')
res.json(response.body)
res.json(response)
} catch (err) {
res.status(err.statusCode || 500)
res.json({

View File

@ -11,7 +11,7 @@
"author": "Tomas Della Vedova",
"license": "Apache-2.0",
"dependencies": {
"@elastic/elasticsearch": "^7.10.0"
"@elastic/elasticsearch": "^8.0.0"
},
"devDependencies": {
"standard": "^16.0.3"

View File

@ -43,21 +43,19 @@ async function generateApiKeys (opts) {
}
})
const { body } = await client.security.createApiKey({
body: {
name: 'elasticsearch-proxy',
role_descriptors: {
'elasticsearch-proxy-users': {
index: [{
names: indexNames,
privileges
}]
}
const result = await client.security.createApiKey({
name: 'elasticsearch-proxy',
role_descriptors: {
'elasticsearch-proxy-users': {
index: [{
names: indexNames,
privileges
}]
}
}
})
return Buffer.from(`${body.id}:${body.api_key}`).toString('base64')
return Buffer.from(`${result.id}:${result.api_key}`).toString('base64')
}
generateApiKeys()

View File

@ -20,7 +20,7 @@ const client = new Client({ node: 'http://localhost:9200' })
async function run () {
await client.index({
index: 'game-of-thrones',
body: {
document: {
character: 'Ned Stark',
quote: 'Winter is coming.',
house: 'stark'
@ -29,7 +29,7 @@ async function run () {
await client.index({
index: 'game-of-thrones',
body: {
document: {
character: 'Arya Stark',
quote: 'A girl is Arya Stark of Winterfell. And I\'m going home.',
house: 'stark'
@ -39,7 +39,7 @@ async function run () {
await client.index({
index: 'game-of-thrones',
refresh: true,
body: {
document: {
character: 'Tyrion Lannister',
quote: 'A Lannister always pays his debts.',
house: 'lannister'
@ -47,33 +47,29 @@ async function run () {
})
await client.reindex({
waitForCompletion: true,
wait_for_completion: true,
refresh: true,
body: {
source: {
index: 'game-of-thrones',
query: {
match: { character: 'stark' }
}
},
dest: {
index: 'stark-index'
},
script: {
lang: 'painless',
source: 'ctx._source.remove("house")'
source: {
index: 'game-of-thrones',
query: {
match: { character: 'stark' }
}
},
dest: {
index: 'stark-index'
},
script: {
lang: 'painless',
source: 'ctx._source.remove("house")'
}
})
const { body } = await client.search({
const result = await client.search({
index: 'stark-index',
body: {
query: { match_all: {} }
}
query: { match_all: {} }
})
console.log(body.hits.hits)
console.log(result.hits.hits)
}
run().catch(console.log)

View File

@ -33,12 +33,12 @@ async function run () {
const responseQueue = []
// Let's index some data!
const { body: bulkResponse } = await client.bulk({
const bulkResponse = await client.bulk({
// here we are forcing an index refresh,
// otherwise we will not get any result
// in the consequent search
refresh: true,
body: [
operations: [
// operation to perform
{ index: { _index: 'game-of-thrones' } },
// the document to index
@ -76,17 +76,15 @@ async function run () {
size: 1,
// filter the source to only include the quote field
_source: ['quote'],
body: {
query: {
match_all: {}
}
query: {
match_all: {}
}
})
responseQueue.push(response)
while (responseQueue.length) {
const { body } = responseQueue.shift()
const body = responseQueue.shift()
// collect the titles from this response
body.hits.hits.forEach(function (hit) {
@ -127,7 +125,7 @@ async function * scrollSearch (params) {
let response = await client.search(params)
while (true) {
const sourceHits = response.body.hits.hits
const sourceHits = response.hits.hits
if (sourceHits.length === 0) {
break
@ -137,12 +135,12 @@ async function * scrollSearch (params) {
yield hit
}
if (!response.body._scroll_id) {
if (!response._scroll_id) {
break
}
response = await client.scroll({
scrollId: response.body._scroll_id,
scrollId: response._scroll_id,
scroll: params.scroll
})
}
@ -151,7 +149,7 @@ async function * scrollSearch (params) {
async function run () {
await client.bulk({
refresh: true,
body: [
operations: [
{ index: { _index: 'game-of-thrones' } },
{
character: 'Ned Stark',
@ -177,10 +175,8 @@ async function run () {
scroll: '30s',
size: 1,
_source: ['quote'],
body: {
query: {
match_all: {}
}
query: {
match_all: {}
}
}

View File

@ -18,7 +18,7 @@ async function run () {
// Let's start by indexing some data
await client.index({
index: 'game-of-thrones',
body: {
document: {
character: 'Ned Stark',
quote: 'Winter is coming.'
}
@ -26,7 +26,7 @@ async function run () {
await client.index({
index: 'game-of-thrones',
body: {
document: {
character: 'Daenerys Targaryen',
quote: 'I am the blood of the dragon.'
}
@ -38,25 +38,23 @@ async function run () {
// otherwise we will not get any result
// in the consequent search
refresh: true,
body: {
document: {
character: 'Tyrion Lannister',
quote: 'A mind needs books like a sword needs a whetstone.'
}
})
// Let's search!
const { body } = await client.search({
const result = await client.search({
index: 'game-of-thrones',
body: {
query: {
match: {
quote: 'winter'
}
query: {
match: {
quote: 'winter'
}
}
})
console.log(body.hits.hits)
console.log(result.hits.hits)
}
run().catch(console.log)

View File

@ -22,7 +22,7 @@ const client = new Client({ node: 'http://localhost:9200' })
async function run () {
await client.index({
index: 'game-of-thrones',
body: {
document: {
character: 'Ned Stark',
quote: 'Winter is coming.',
house: 'stark'
@ -31,7 +31,7 @@ async function run () {
await client.index({
index: 'game-of-thrones',
body: {
document: {
character: 'Arya Stark',
quote: 'A girl is Arya Stark of Winterfell. And I\'m going home.',
house: 'stark'
@ -41,25 +41,23 @@ async function run () {
await client.index({
index: 'game-of-thrones',
refresh: true,
body: {
document: {
character: 'Tyrion Lannister',
quote: 'A Lannister always pays his debts.',
house: 'lannister'
}
})
const { body } = await client.sql.query({
body: {
query: "SELECT * FROM \"game-of-thrones\" WHERE house='stark'"
}
const result = await client.sql.query({
query: "SELECT * FROM \"game-of-thrones\" WHERE house='stark'"
})
console.log(body)
console.log(result)
const data = body.rows.map(row => {
const data = result.rows.map(row => {
const obj = {}
for (let i = 0; i < row.length; i++) {
obj[body.columns[i].name] = row[i]
obj[result.columns[i].name] = row[i]
}
return obj
})

View File

@ -15,9 +15,9 @@ const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })
async function run () {
const { body: bulkResponse } = await client.bulk({
const bulkResponse = await client.bulk({
refresh: true,
body: [
operations: [
{ index: { _index: 'game-of-thrones' } },
{
character: 'Ned Stark',
@ -43,22 +43,20 @@ async function run () {
process.exit(1)
}
const { body } = await client.search({
const result = await client.search({
index: 'game-of-thrones',
body: {
query: {
match: { quote: 'witner' }
},
suggest: {
gotsuggest: {
text: 'witner',
term: { field: 'quote' }
}
query: {
match: { quote: 'winter' }
},
suggest: {
gotsuggest: {
text: 'winter',
term: { field: 'quote' }
}
}
})
console.log(body)
console.log(result)
}
run().catch(console.log)

View File

@ -23,9 +23,9 @@ const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })
async function run () {
const { body: bulkResponse } = await client.bulk({
const bulkResponse = await client.bulk({
refresh: true,
body: [
operations: [
{ index: { _index: 'game-of-thrones' } },
{
character: 'Ned Stark',
@ -51,7 +51,7 @@ async function run () {
process.exit(1)
}
const { body } = await client.transport.request({
const response = await client.transport.request({
method: 'POST',
path: '/game-of-thrones/_search',
body: {
@ -64,7 +64,7 @@ async function run () {
querystring: {}
})
console.log(body)
console.log(response)
}
run().catch(console.log)

View File

@ -1,72 +0,0 @@
[[typescript_examples]]
=== Typescript
The client offers a first-class support for TypeScript, since it ships the type
definitions for every exposed API.
NOTE: If you are using TypeScript you will be required to use _snake_case_ style
to define the API parameters instead of _camelCase_.
[source,ts]
----
'use strict'
import { Client, ApiResponse, RequestParams } from '@elastic/elasticsearch'
const client = new Client({ node: 'http://localhost:9200' })
async function run (): void {
// Let's start by indexing some data
const doc1: RequestParams.Index = {
index: 'game-of-thrones',
body: {
character: 'Ned Stark',
quote: 'Winter is coming.'
}
}
await client.index(doc1)
const doc2: RequestParams.Index = {
index: 'game-of-thrones',
body: {
character: 'Daenerys Targaryen',
quote: 'I am the blood of the dragon.'
}
}
await client.index(doc2)
const doc3: RequestParams.Index = {
index: 'game-of-thrones',
// here we are forcing an index refresh,
// otherwise we will not get any result
// in the consequent search
refresh: true,
body: {
character: 'Tyrion Lannister',
quote: 'A mind needs books like a sword needs a whetstone.'
}
}
await client.index(doc3)
// Let's search!
const params: RequestParams.Search = {
index: 'game-of-thrones',
body: {
query: {
match: {
quote: 'winter'
}
}
}
}
client
.search(params)
.then((result: ApiResponse) => {
console.log(result.body.hits.hits)
})
.catch((err: Error) => {
console.log(err)
})
}
run()
----

View File

@ -16,7 +16,7 @@ async function run () {
await client.index({
index: 'game-of-thrones',
id: '1',
body: {
document: {
character: 'Ned Stark',
quote: 'Winter is coming.',
times: 0
@ -26,23 +26,21 @@ async function run () {
await client.update({
index: 'game-of-thrones',
id: '1',
body: {
script: {
lang: 'painless',
source: 'ctx._source.times++'
// you can also use parameters
// source: 'ctx._source.times += params.count',
// params: { count: 1 }
}
script: {
lang: 'painless',
source: 'ctx._source.times++'
// you can also use parameters
// source: 'ctx._source.times += params.count',
// params: { count: 1 }
}
})
const { body } = await client.get({
const document = await client.get({
index: 'game-of-thrones',
id: '1'
})
console.log(body)
console.log(document)
}
run().catch(console.log)
@ -62,7 +60,7 @@ async function run () {
await client.index({
index: 'game-of-thrones',
id: '1',
body: {
document: {
character: 'Ned Stark',
quote: 'Winter is coming.',
isAlive: true
@ -72,19 +70,17 @@ async function run () {
await client.update({
index: 'game-of-thrones',
id: '1',
body: {
doc: {
isAlive: false
}
doc: {
isAlive: false
}
})
const { body } = await client.get({
const document = await client.get({
index: 'game-of-thrones',
id: '1'
})
console.log(body)
console.log(document)
}
run().catch(console.log)

View File

@ -15,7 +15,7 @@ const client = new Client({ node: 'http://localhost:9200' })
async function run () {
await client.index({
index: 'game-of-thrones',
body: {
document: {
character: 'Ned Stark',
quote: 'Winter is coming.'
}
@ -24,7 +24,7 @@ async function run () {
await client.index({
index: 'game-of-thrones',
refresh: true,
body: {
document: {
character: 'Arya Stark',
quote: 'A girl is Arya Stark of Winterfell. And I\'m going home.'
}
@ -33,27 +33,23 @@ async function run () {
await client.updateByQuery({
index: 'game-of-thrones',
refresh: true,
body: {
script: {
lang: 'painless',
source: 'ctx._source["house"] = "stark"'
},
query: {
match: {
character: 'stark'
}
script: {
lang: 'painless',
source: 'ctx._source["house"] = "stark"'
},
query: {
match: {
character: 'stark'
}
}
})
const { body } = await client.search({
const result = await client.search({
index: 'game-of-thrones',
body: {
query: { match_all: {} }
}
query: { match_all: {} }
})
console.log(body.hits.hits)
console.log(result.hits.hits)
}
run().catch(console.log)