Realiza consultas de texto con el cliente Elasticsearch Go

Aprende a realizar consultas de texto tradicionales en Elasticsearch usando el cliente Elasticsearch Go a través de un ejemplo práctico.

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.

Desarrollar software en cualquier lenguaje de programación, incluido Go, es comprometer con una vida entera de aprendizaje. A lo largo de su carrera universitaria y profesional, Carly tuvo que adaptar a ser políglota y experimentar con muchos lenguajes de programación, incluyendo Python, C, JavaScript, TypeScript y Java. ¡Pero eso no fue suficiente! ¡Hace poco también empezó a jugar con Go!

Al igual que los animales, los lenguajes de programación y uno de tus autores amables, la búsqueda experimentó una evolución de diferentes prácticas que pueden ser difíciles de elegir para tu propio caso de uso. En este blog, compartiremos una visión general de la búsqueda tradicional por palabras clave junto con un ejemplo usando Elasticsearch y el cliente Elasticsearch Go.

Prerrequisitos

Para seguir con este ejemplo, cerciorar de cumplir los siguientes requisitos:

  1. Instalación de Go versión 1.21 o posterior
  2. Crea tu propio repositorio de Go usando la estructura recomendada y la gestión de paquetes que se menciona en la documentación de Go
  3. Creación de tu propio clúster Elasticsearch, poblado con un conjunto de páginas basadas en roedores , incluyendo para nuestro amable Gopher, de Wikipedia:

Conexión con Elasticsearch

En nuestros ejemplos, emplearemos la API tipada que ofrece el cliente Go. Establecer una conexión segura para cualquier consulta requiere configurar el cliente usando cualquiera de:

  1. Cloud ID y clave API si se emplea Elastic Cloud.
  2. URL del clúster, nombre de usuario, contraseña y el certificado.

Conectarse a nuestro clúster ubicado en Elastic Cloud sería así:

La conexión client puede usar entonces para buscar, como se muestra más adelante.

La búsqueda por palabras clave es el tipo de búsqueda fundamental con el que estamos familiarizados desde la creación de Archie, el primer motor de búsqueda documentado en Internet escrito en 1990.

Un componente central de la búsqueda por palabras clave es la traducción de documentos a un índice invertido. Exactamente como el índice que se encuentra al final de un libro de texto, un índice invertido contiene un mapeo entre una lista de tokens y su ubicación en cada documento. El siguiente diagrama muestra las etapas clave para generar el índice:

Como se muestra arriba, la generación de tokens en Elasticsearch comprende tres etapas clave:

  1. Despojar personajes innecesarios mediante cero o más char_filters. En nuestro ejemplo, eliminamos elementos HTML dentro del campo body_content mediante el filtro html_strip .
  2. Separar los tokens del contenido con el tokenizador standard, que se divide por espaciado y puntaje clave.
  3. Eliminar tokens no deseados o transformar tokens del flujo de salida del tokenizador usando opciones de cero o más filter, como el filtro de token lowercaseo stemmers como el stemmer snowballpara transformar tokens de nuevo a su raíz de lenguaje.

Búsqueda en Elasticsearch con Go

Al consultar con el cliente Go, especificamos el índice que queremos buscar y pasar en la consulta y otras opciones, igual que en el siguiente ejemplo:

En el ejemplo anterior, realizamos una consulta estándar de matchpara encontrar cualquier documento en nuestro índice que contenga la cadena especificada que se pasó a nuestra función. Observar que pasamos un nuevo contexto vacío a la ejecución de búsqueda mediante Do(context.Background()). Además, cualquier error devuelto por Elasticsearch se envía al atributo err para el registro y el manejo de errores.

Los resultados se devuelven en res.Hits.Hits con el atributo _Source que contiene el documento en formato JSON. Para convertir esta fuente a un struct compatible con Go, necesitamos deshacer el marshal de la respuesta JSON usando el paquete de codificación/json de Go, como se muestra en el siguiente ejemplo:

Buscar y desorganizar la consulta gopher devolverá la página de Wikipedia de Gopher como se esperaba:

Sin embargo, si preguntamos What do Gophers eat? no obtenemos exactamente los resultados que queremos:

Una búsqueda sencilla por palabra clave permite que los resultados devuelvan a tu aplicación Go de forma eficiente que funciona de una manera que conocemos por las aplicaciones que empleamos. También funciona muy bien para coincidencias de términos exactos relevantes para escenarios como buscar una compañía o término concreto.

Sin embargo, como vimos arriba, le cuesta identificar el contexto y la semántica debido al problema de la desadaptación del vocabulario. Además, el soporte para formatos de archivo no textuales, como imágenes y audio, resulta complicado.

Conclusión

Aquí hablamos de cómo realizar consultas de texto tradicionales en Elasticsearch usando el cliente Elasticsearch Go. Dado que Go se usa ampliamente para scripting de infraestructura y construcción de servidores sitio web, es útil saber cómo buscar en Go.

Echa un vistazo al repositorio de GitHub para ver todo el código de este serial. Continúa la parte 2 para obtener una visión general de la búsqueda vectorial y cómo realizar la búsqueda vectorial en Go. Hasta entonces, ¡feliz caza de topos!

Recursos

  1. Guía Elasticsearch
  2. Cliente Elasticsearch Go
  3. Comprendiendo el análisis en Elasticsearch (analizadores) por Bo Andersen | #CodingExplained

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