Elasticsearch sql traducir API

Elasticsearch sql traducir API
En esta publicación, aprenderemos cómo traducir una búsqueda SQL en una solicitud de API de búsqueda de Elasticsearch válida que contenga un lenguaje específico de dominio de consulta completa basado en JSON.

Aunque esta es una API pequeña, es una herramienta muy beneficiosa, especialmente para los desarrolladores que provienen de bases de datos SQL. También puede reducir la curva de aprendizaje relacionando rápidamente las consultas SQL con las consultas de búsqueda correspondientes.

Luego puede explorar las capacidades completas de la API de búsqueda de ElasticSearch y los idiomas de consulta compatibles.

Es a tener en cuenta que, aunque ElasticSearch admite SQL, contiene varias limitaciones.

Sintaxis de consulta

Lo siguiente muestra la sintaxis de la API de traducción:

Obtener _sql/traducir

request_body

También puede enviar una solicitud de publicación a la API de traducción como se muestra en la siguiente sintaxis:

Publicar _sql/traducir

request_body

Dependiendo de la configuración de su clúster, la API puede requerir privilegios de lectura en el índice cuyos datos desea consultar. También puede especificar el recurso de destino como un alias de índice o un flujo de datos.

En el request_body, puede especificar todos los parámetros del cuerpo de solicitud de API de búsqueda SQL. Explore los documentos proporcionados en el siguiente recurso para obtener más información:

https: // www.elástico.CO/Guía/EN/ElasticSearch/Reference/Current/SQL-Search-API.HTML#SQL-Search-API-Request-Body

Como respuesta, la consulta debe devolver el resultado correspondiente a la API de búsqueda con los datos consultados.

Ejemplo

Para ilustrar mejor cómo usar esta API, asumiremos que tenemos un índice llamado "Netflix" que contiene todos los datos sobre películas y programas de televisión de Netflix.

Supongamos que deseamos obtener las cinco mejores películas del índice de Netflix que lanzamos en el año 2020 y superior:

La consulta SQL equivalente se puede expresar como se muestra a continuación:

Seleccione Título, Duración, Clasificación, Escriba desde Netflix donde tipo = 'Movie' y Release_Year> = 2020

Para ejecutar la búsqueda SQL anterior en ElasticSearch, podemos ponerla en la API de búsqueda SQL como se muestra a continuación:

curl -xget "http: // localhost: 9200/_sql?formato = txt "-h" kbn -xsrf: informes "-h" tipo de contenido: aplicación/json "-d '

"Query": "\ n Seleccionar título, duración, calificación, escriba desde" Netflix "Where type = '\" Movie' \ '' y versión_year> = 2020 \ n "",
""Fetch_size"": 5
'

La solicitud anterior debe consultar el índice y obtener los registros coincidentes. La salida de retorno está en formato de texto como se proporciona a continuación:

Como podemos ver, Elasticsearch devuelve la salida esperada.

Para devolver la salida como JSON, podemos establecer el formato en JSON como se muestra a continuación:

curl -xget ""http: // localhost: 9200/_sql?formato = JSON ""-H"" KBN -XSRF: Informe ""-h"" Tipo de contenido: Application/JSON ""-D '

""Query"": ""\ n Seleccionar título, duración, calificación, escriba desde"" Netflix ""Where type = '\"" Movie' \ '' y versión_year> = 2020 \ n "",
""Fetch_size"": 5
'

Producción:

Convertir la consulta SQL en solicitud de búsqueda

Para convertir la consulta de búsqueda SQL anterior en una solicitud de ElasticSearch, podemos pasarla a la API de traducción como se muestra a continuación:

curl -xget ""http: // localhost: 9200/_sql/traducir"" -h ""kbn -xsrf: informes"" -h ""tipo de contenido: aplicación/json"" -d '

""Query"": ""\ n Seleccionar título, duración, calificación, escriba desde"" Netflix ""Where type = '\"" Movie' \ '' y versión_year> = 2020 \ n "",
""Fetch_size"": 5
'

La API debe analizar la entrada SQL de entrada y convertirla en una solicitud de búsqueda válida, como se muestra en la siguiente salida:


""talla 5,
""consulta"":
""Bool"":
""debe"": [

""término"":
""tipo"":
""Valor"": ""Película""


,

""rango"":
""año de lanzamiento"":
""GTE"": 2020,
""Boost"": 1



],
""Boost"": 1

,
""_source"": falso,
""campos"": [

""Campo"": ""Título""
,

""Campo"": ""Duración""
,

""Campo"": ""Calificación""
,

""Tipo de campo""

],
""clasificar"": [

""_doc"":
""Orden"": ""ASC""


]

Luego puede usar este formato de solicitud para enviar a la API de búsqueda de ElasticSearch como se muestra a continuación:

curl -xpost ""http: // localhost: 9200/netflix/_search"" -h ""kbn -xsrf: informes"" -h ""de contenido: aplicación/json"" -d '

""talla 5,
""consulta"":
""Bool"":
""debe"": [

""término"":
""tipo"":
""Valor"": ""Película""


,

""rango"":
""año de lanzamiento"":
""GTE"": 2020,
""Boost"": 1



],
""Boost"": 1

,
""_source"": falso,
""campos"": [

""Campo"": ""Título""
,

""Campo"": ""Duración""
,

""Campo"": ""Calificación""
,

""Tipo de campo""

],
""clasificar"": [

""_doc"":
""Orden"": ""ASC""


]
'

Del mismo modo, la solicitud debe devolver datos similares como se muestra a continuación:

Conclusión

A través de esta publicación, descubrió cómo podría usar consultas SQL para obtener datos de un índice de Elasticsearch existente. También aprendió cómo usar la API SQL Translate para convertir una consulta SQL válida en una solicitud de ElasticSearch.

"