Added examples

This commit is contained in:
delvedor
2019-02-14 18:34:20 +01:00
parent 1c2dbf6e76
commit f704d4fcf3
4 changed files with 209 additions and 16 deletions

View File

@ -0,0 +1,51 @@
= MSearch
The multi search API allows to execute several search requests within the same API.
[source,js]
----
'use strict'
const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })
async function run () {
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.'
}
]
})
const { body } = await client.msearch({
body: [
{ index: 'game-of-thrones' },
{ query: { match: { character: 'Daenerys' } } },
{ index: 'game-of-thrones' },
{ query: { match: { character: 'Tyrion' } } }
]
})
console.log(body.responses)
}
run().catch(console.log)
----

View File

@ -91,5 +91,84 @@ async function run () {
}
}
run().catch(console.log)
----
Another cool usage of the `scroll` API can be done with Node.js ≥ 10, by using async iteration!
[source,js]
----
'use strict'
const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })
// Scroll utility
async function * scrollSearch (params) {
var response = await client.search(params)
while (true) {
const sourceHits = response.body.hits.hits
if (sourceHits.length === 0) {
break
}
for (const hit of sourceHits) {
yield hit
}
if (!response.body._scroll_id) {
break
}
response = await client.scroll({
scrollId: response.body._scroll_id,
scroll: params.scroll
})
}
}
async function run () {
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.'
}
]
})
const params = {
index: 'game-of-thrones',
scroll: '30s',
size: 1,
_source: ['quote'],
body: {
query: {
match_all: {}
}
}
}
for await (const hit of scrollSearch(params)) {
console.log(hit._source)
}
}
run().catch(console.log)
----

View File

@ -0,0 +1,59 @@
= Suggest
The suggest feature suggests similar looking terms based on a provided text by using a suggester. _Parts of the suggest feature are still under development._
The suggest request part is defined alongside the query part in a `search` request. +
If the query part is left out, only suggestions are returned.
[source,js]
----
'use strict'
const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })
async function run () {
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.'
}
]
})
const { body } = await client.search({
index: 'game-of-thrones',
body: {
query: {
match: { quote: 'witner' }
},
suggest: {
gotsuggest: {
text: 'witner',
term: { field: 'quote' }
}
}
}
})
console.log(body)
}
run().catch(console.log)
----

View File

@ -8,28 +8,30 @@ NOTE: If you are using TypeScript you will be required to use _snake_case_ style
----
'use strict'
import { Client, ApiResponse } from '@elastic/elasticsearch'
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
await client.index({
const doc1: RequestParams.Index = {
index: 'game-of-thrones',
body: {
character: 'Ned Stark',
quote: 'Winter is coming.'
}
})
}
await client.index(doc1)
await client.index({
const doc2: RequestParams.Index = {
index: 'game-of-thrones',
body: {
character: 'Daenerys Targaryen',
quote: 'I am the blood of the dragon.'
}
})
}
await client.index(doc2)
await client.index({
const doc3: RequestParams.Index = {
index: 'game-of-thrones',
// here we are forcing an index refresh,
// otherwise we will not get any result
@ -39,20 +41,22 @@ async function run (): void {
character: 'Tyrion Lannister',
quote: 'A mind needs books like a sword needs a whetstone.'
}
})
}
await client.index(doc3)
// Let's search!
client
.search({
index: 'game-of-thrones',
body: {
query: {
match: {
quote: 'winter'
}
const params: RequestParams.Search = {
index: 'game-of-thrones',
body: {
query: {
match: {
quote: 'winter'
}
}
})
}
}
client
.search(params)
.then((result: ApiResponse) => {
console.og(result.body.hits.hits)
})