API de tradução do Elasticsearch SQL

Api De Traducao Do Elasticsearch Sql



Nesta postagem, aprenderemos como traduzir uma pesquisa SQL em uma solicitação de API de pesquisa válida do Elasticsearch contendo linguagem específica de domínio de consulta completa com base em JSON.

Embora esta seja uma API pequena, é uma ferramenta muito benéfica, especialmente para desenvolvedores vindos de bancos de dados SQL. Ele também pode reduzir a curva de aprendizado relacionando rapidamente as consultas SQL às consultas de pesquisa correspondentes.

Você pode então explorar todos os recursos da API de pesquisa do Elasticsearch e as linguagens de consulta com suporte.







É importante ter em mente que, embora o Elasticsearch ofereça suporte a SQL, ele contém várias limitações.



Sintaxe da consulta

Veja a seguir a sintaxe da API de tradução:



GET _sql/translate

{

request_body

}

Você também pode enviar uma solicitação de postagem para a API de tradução, conforme mostrado na sintaxe a seguir:





POST _sql/translate

{

request_body

}

Dependendo da configuração do cluster, a API pode exigir privilégios de leitura no índice cujos dados você deseja consultar. Você também pode especificar o recurso de destino como um alias de índice ou um fluxo de dados.

No request_body, você pode especificar todos os parâmetros do corpo da solicitação da API SQL Search. Explore os documentos fornecidos no recurso a seguir para saber mais:



https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html#sql-search-api-request-body

Como resposta, a consulta deve retornar o resultado correspondente à API de pesquisa com os dados consultados.

Exemplo

Para melhor ilustrar como usar essa API, vamos supor que temos um índice chamado “netflix” contendo todos os dados sobre filmes e programas de TV da Netflix.

Suponha que desejamos buscar os cinco principais filmes do índice Netflix que lançamos no ano de 2020 e acima:

A consulta SQL equivalente pode ser expressa como mostrado abaixo:

SELECIONE título, duração, classificação, tipo FROM netflix WHERE type = 'Filme' E lançamento_ano >= 2020

Para executar a pesquisa SQL acima no Elasticsearch, podemos colocá-la na API SQL Search conforme mostrado abaixo:

curl -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: relatórios' -H 'Tipo de conteúdo: aplicativo/json' -d '

{

'consulta': ' \n SELECIONE título, duração, classificação, tipo FROM 'netflix' WHERE type = '
\ '' Filme ' \' ' E lançamento_ano >= 2020 \n ',

'
fetch_size ': 5

}'

A solicitação anterior deve consultar o índice e buscar os registros correspondentes. A saída de retorno está em formato de texto conforme fornecido abaixo:

Como podemos ver, o Elasticsearch retorna a saída esperada.

Para retornar a saída como JSON, podemos definir o formato para JSON conforme mostrado abaixo:

curl -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: relatórios' -H 'Tipo de conteúdo: aplicativo/json' -d '

{

'consulta': ' \n SELECIONE título, duração, classificação, tipo FROM 'netflix' WHERE type = '
\ '' Filme ' \' ' E lançamento_ano >= 2020 \n ',

'
fetch_size ': 5

}'

Resultado:

Converter consulta SQL em solicitação de pesquisa

Para converter a consulta de pesquisa SQL anterior em uma solicitação do Elasticsearch, podemos passá-la para a API de tradução conforme mostrado abaixo:

curl -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: relatórios' -H 'Tipo de conteúdo: aplicativo/json' -d '

{

'consulta': ' \n SELECIONE título, duração, classificação, tipo FROM 'netflix' WHERE type = '
\ '' Filme ' \' ' E lançamento_ano >= 2020 \n ',

'
fetch_size ': 5

}'

A API deve analisar a entrada SQL de entrada e convertê-la em uma solicitação de pesquisa válida, conforme mostrado na saída a seguir:

{
'Tamanho' : 5 ,
'consulta' : {
'bool' : {
'devo' : [
{
'prazo' : {
'modelo' : {
'valor' : 'Filme'
}
}
},
{
'variar' : {
'ano de lançamento' : {
'gte' : 2020 ,
'impulso' : 1
}
}
}
],
'impulso' : 1
}
},
'_fonte' : falso,
'Campos' : [
{
'campo' : 'título'
},
{
'campo' : 'duração'
},
{
'campo' : 'Avaliação'
},
{
'campo' : 'modelo'
}
],
'ordenar' : [
{
'_doc' : {
'ordem' : 'asc'
}
}
]
}

Você pode usar esse formato de solicitação para enviar para a API de pesquisa do Elasticsearch, conforme mostrado abaixo:

curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: relatórios' -H 'Tipo de conteúdo: aplicativo/json' -d '
{
'tamanho': 5,
'consulta': {
'bool': {
'devo': [
{
'termo': {
'modelo': {
'valor': 'Filme'
}
}
},
{
'variar': {
'ano de lançamento': {
'gte': 2020,
'aumentar': 1
}
}
}
],
'aumentar': 1
}
},
'_source': falso,
'Campos': [
{
'campo': 'título'
},
{
'campo': 'duração'
},
{
'campo': 'classificação'
},
{
'tipo de campo'
}
],
'ordenar': [
{
'_doc': {
'pedido': 'asc'
}
}
]
}'

Da mesma forma, a solicitação deve retornar dados semelhantes, conforme mostrado abaixo:

Conclusão

Por meio desta postagem, você descobriu como usar consultas SQL para buscar dados de um índice Elasticsearch existente. Você também aprendeu a usar a API translate SQL para converter uma consulta SQL válida em uma solicitação Elasticsearch.