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:
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 >= 2020Para 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.