Elasticsearch SQL traduze API

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

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

Você pode explorar os recursos completos da API de pesquisa Elasticsearch e as linguagens de consulta suportadas.

É para ter em mente que, embora o Elasticsearch suporta o SQL, ele contém várias limitações.

Sintaxe de consulta

A seguir, mostra a sintaxe da API de tradução:

Obtenha _sql/tradução

request_body

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

Post _sql/tradução

request_body

Dependendo da sua configuração de 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 pedido, você pode especificar todos os parâmetros do corpo da API de pesquisa de pesquisa SQL. Explore os documentos fornecidos no seguinte recurso para saber mais:

https: // www.elástico.CO/guia/pt/elasticsearch/reference/current/sql-search-api.HTML#SQL-SECH-API-REQUEST-BODO

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

Exemplo

Para ilustrar melhor como usar esta API, assumiremos que temos um índice chamado "Netflix" contendo todos os dados sobre filmes e programas de TV da Netflix.

Suponha que desejemos buscar os cinco principais filmes do índice da 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, Digite de Netflix WHERE TIPO = 'FILME' E RELELHADE_YEAR> = 2020

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

Curl -xget "http: // localhost: 9200/_sql?formato = txt "-h" kbn -xsrf: relatórios "-h" conteúdo -tipo: aplicativo/json "-d '

"Query": "\ n Selecione título, duração, classificação, tipo de" netflix "onde tipo = '\" filme' \ '' e release_year> = 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, elasticsearch retorna a saída esperada.

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

Curl -xget ""http: // localhost: 9200/_sql?formato = json ""-h"" kbn -xsrf: relatórios ""-h"" conteúdo -tipo: aplicativo/json ""-d '

""Query"": ""\ n Selecione título, duração, classificação, tipo de"" netflix ""onde tipo = '\"" filme' \ '' e release_year> = 2020 \ n "",
""Fetch_size"": 5
'

Saída:

Converta a consulta SQL em solicitação de pesquisa

Para converter a consulta anterior de pesquisa do SQL em uma solicitação de pesquisa de elasticidade, podemos passar para a API de tradução, como mostrado abaixo:

Curl -xget ""http: // localhost: 9200/_sql/tradutor"" -h ""kbn -xsrf: relatórios"" -h ""content -type: aplicativo/json"" -d '

""Query"": ""\ n Selecione título, duração, classificação, tipo de"" netflix ""onde tipo = '\"" filme' \ '' e release_year> = 2020 \ n "",
""Fetch_size"": 5
'

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


""Tamanho"": 5,
""consulta"":
""bool"":
""deve"": [

""termo"":
""tipo"":
""Valor"": ""filme""


,

""faixa"":
""ano de lançamento"":
""GTE"": 2020,
""Boost"": 1



],
""Boost"": 1

,
""_source"": false,
""Campos"": [

""Campo"": ""título""
,

""Campo"": ""Duração""
,

""Campo"": ""Classificação""
,

""tipo de campo""

],
""organizar"": [

""_doc"":
""Ordem"": ""ASC""


]

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

Curl -xpost ""http: // localhost: 9200/netflix/_search"" -h ""kbn -xsrf: relating"" -h ""content -type: aplicativo/json"" -d '

""Tamanho"": 5,
""consulta"":
""bool"":
""deve"": [

""termo"":
""tipo"":
""Valor"": ""filme""


,

""faixa"":
""ano de lançamento"":
""GTE"": 2020,
""Boost"": 1



],
""Boost"": 1

,
""_source"": false,
""Campos"": [

""Campo"": ""título""
,

""Campo"": ""Duração""
,

""Campo"": ""Classificação""
,

""tipo de campo""

],
""organizar"": [

""_doc"":
""Ordem"": ""ASC""


]
'

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

Conclusão

Através deste post, você descobriu como poderia usar as consultas SQL para buscar dados de um índice de pesquisa de elasticidade existente. Você também aprendeu a usar a API de tradução SQL para converter uma consulta SQL válida em uma solicitação de pesquisa de elasticidade.

"