De ES|Objetos de QL a PHP

Aprende a ejecutar y gestionar ES|Consultas QL en PHP. Sigue esta guía para mapear ES|QL resulta en un objeto PHP o clase personalizada.

Experimenta con Elasticsearch: Sumérgete en nuestros cuadernos de muestra, inicia una prueba gratuita del cloud o prueba Elastic en tu máquina local ahora.

A partir de elasticsearch-php v8.13.0 puedes ejecutar ES|QL consulta y mapea el resultado a un objeto PHP de stdClass o a una clase personalizada.

ES|QL

ES|QL es un nuevo lenguaje de consulta Elasticsearch introducido en Elasticsearch 8.11.0. Ahora mismo, está disponible en vista previa técnica. Proporciona una forma poderosa de filtrar, transformar y analizar los datos almacenados en Elasticsearch.

Emplea "tuberías" (|) para manipular y transformar datos paso a paso. Este enfoque permite a los usuarios componer un serial de operaciones, donde la salida de una operación se convierte en la entrada para la siguiente, permitiendo transformaciones y análisis complejos de datos.

Por ejemplo, la siguiente consulta devuelve los primeros 3 documentos (filas) del índice sample_data :

Caso de uso: ES|Funciones de QL en el cliente oficial de PHP

Para ilustrar el ES|Características de QL desarrolladas en el cliente oficial de PHP, almacenamos en Elasticsearch un archivo CSV de 81.828 libros (54,4 MB) incluyendo la siguiente información:

Extrajimos esta lista del conjunto de datos de Amazon Books Reviews, disponible al público.

Creamos un índice books con los siguientes mapeos de Elasticsearch:

El valor rating es la media de las reseñas de clasificación tomadas del archivo Books_rating.csv de 2,9 GB.

Aquí puedes encontrar el script PHP que usamos para importar en masa todos los libros en Elasticsearch. La operación a granel consumía 7 segundos y 28 MB de RAM usando PHP 8.2.17. Con el mapeo propuesto, el tamaño del índice en Elasticsearch es de unos 62 MB.

Mapa ES|Resultados QL a un objeto PHP o clase personalizada

Podemos ejecutar ES|Consulta QL en PHP usando el punto final esql()->query() . El resultado de esta consulta es una estructura de datos de tabla. Esto se expresa en JSON usando los campos columns y values . En el campo columns tenemos la definición de name y type .

Aquí tienes un ejemplo de ES|Consulta QL para recuperar los 10 mejores libros escritos por Stephen King ordenados por las reseñas de ranking de usuarios:

El resultado JSON de Elasticsearch es el siguiente:

En este ejemplo tenemos 6 propiedades (autor, descripción, editor, valoración, título, año) relacionadas con un libro y 10 resultados, todos libros de Stephen King.

Una lista de todos los tipos soportados en ES|Aquí se informa de QL.

El objeto de respuesta $result puede acceder como un array, una cadena o un objeto ( ver aquí para más información).

Usando la interfaz objeto, podemos acceder a los valores mediante propiedades e índices. Por ejemplo, $result->values[0][4] devuelve el título (4) del primer libro (0) en la lista, $result->values[1][3] devuelve el puntaje de rango (3) del segundo libro (1), etc. Recuerda, el índice de un array en PHP empieza desde cero.

Esta interfaz puede ser suficientemente buena para algunos casos de uso, pero la mayoría de las veces nos gustaría tener una variedad de objetos como resultado.

Para mapear el resultado en un array de objetos podemos usar la nueva función mapTo() de elasticsearch-php.

Esta función está disponible directamente en el objeto de respuesta Elasticsearch. Eso significa que puedes acceder a él de la siguiente manera:

Si tienes una clase Book personalizada, puedes mapear el resultado usándola de la siguiente manera:

Si tu clase tiene otras propiedades además de las incluidas en el ES|Resultado QL, esto también funcionará. La función mapTo() usará solo las propiedades devueltas como columnas del ES|Resultado de QL.

Puedes descargar todos los ejemplos que se mencionan en este artículo aquí.

Preguntas frecuentes

¿Qué es ES|¿QL?

ES|QL es un lenguaje de consulta Elasticsearch, que fue introducido en Elasticsearch 8.11.0. Proporciona una forma poderosa de filtrar, transformar y analizar los datos almacenados en Elasticsearch.

Contenido relacionado

¿Estás listo para crear experiencias de búsqueda de última generación?

No se logra una búsqueda suficientemente avanzada con los esfuerzos de uno. Elasticsearch está impulsado por científicos de datos, operaciones de ML, ingenieros y muchos más que son tan apasionados por la búsqueda como tú. Conectemos y trabajemos juntos para crear la experiencia mágica de búsqueda que te dará los resultados que deseas.

Pruébalo tú mismo