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:
- Instalación de Go versión 1.21 o posterior
- 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
- 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:
- Cloud ID y clave API si se emplea Elastic Cloud.
- 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.
Búsqueda por palabras clave
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:
- Despojar personajes innecesarios mediante cero o más
char_filters. En nuestro ejemplo, eliminamos elementos HTML dentro del campobody_contentmediante el filtrohtml_strip. - Separar los tokens del contenido con el tokenizador
standard, que se divide por espaciado y puntaje clave. - 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 tokenlowercaseo stemmers como el stemmersnowballpara 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!
