Desde las plataformas de comercio electrónico a los Sistemas de Gestión de Contenidos (CMS), las aplicaciones web generan y manejan enormes cantidades de datos. Extraer información relevante de estos datos de forma eficiente es crucial para una experiencia de usuario fluida. Por eso, la funcionalidad de búsqueda tradicional que utiliza la concordancia literal de consulta palabra por palabra no es suficiente. Necesitas una búsqueda de texto completo.

Una búsqueda de texto completo examina el contenido completo de documentos o bases de datos, lo que te permite recuperar información relevante de grandes conjuntos de datos basándote en palabras o frases concretas. Tiene en cuenta factores como la frecuencia de aparición y el contenido multilingüe, lo que produce resultados de búsqueda más precisos y completos.

Meilisearch está a la vanguardia de esta clase de motores de búsqueda, aprovechando el poder de la búsqueda de texto completo para ofrecer una herramienta flexible y potente creada pensando en los desarrolladores y usuarios finales.

Este tutorial muestra cómo integrar Meilisearch en un proyecto web Node.js.

¿Qué es Meilisearch?

Meilisearch es un motor de búsqueda de código abierto que proporciona resultados de búsqueda rápidos y relevantes para los usuarios finales. Es tolerante a los errores tipográficos y funciona con una configuración predeterminada que se adapta a la mayoría de los proyectos.

Meilisearch también es muy personalizable, ya que ofrece numerosas funciones para ajustar la relevancia de los resultados de búsqueda. Entre estas funciones, la más destacada son las reglas de clasificación, que puedes adaptar a tu proyecto.

Ofrece una intuitiva API RESTful para una integración perfecta en prácticamente cualquier sitio web empresarial. Puedes alojarlo tú mismo o utilizar su solución oficial alojada en la nube, Meilisearch Cloud, para empezar a utilizarlo rápidamente y sin esfuerzo. Este tutorial utiliza la Nube de Meilisearch.

Requisitos Previos

Para seguir el tutorial, necesitas

Cómo Configurar Meilisearch

  1. Ve a la Nube de Meilisearch y crea una cuenta o inicia sesión. Asegúrate de confirmar tu dirección de correo electrónico.
  2. A continuación, haz clic en Crear un proyecto, un servidor que ejecuta una instancia de Meilisearch, donde añadirás los conjuntos de datos de tu sitio web.
  3. Añade un Nombre de proyecto (por ejemplo, libro-app) y elige la región que prefieras. A continuación, haz clic en Crear. Después de crear tu proyecto, puedes hacer clic en Configuración para ver detalles sobre tu proyecto, como la URL para acceder a los conjuntos de datos, las claves API para proteger tu instancia de Meilisearch y otra información.
    La página de resumen del proyecto de la aplicación libro.
    La página de resumen del proyecto de la aplicación libro.

    Hay tres claves API, cada una de las cuales representa un nivel de autorización diferente:

    • Clave Maestra — Esta clave desbloquea todas las rutas y es la única con acceso a los endpoints para crear y eliminar claves API. Utiliza la clave maestra sólo para gestionar claves API desde un entorno protegido.
    • Clave API de Búsqueda Predeterminada — Esta clave sólo da acceso a la ruta de búsqueda. Puedes utilizarla en el código del lado del cliente.
    • Clave Admin API por Defecto — Esta clave da acceso a todas las rutas API excepto a /keys, que es para crear y borrar claves API. Sólo puedes utilizar esta clave desde un entorno protegido.

Cómo Indexar Datos con Meilisearch

Los índices son los componentes básicos que almacenan y organizan los datos que se pueden buscar. Actúan como contenedores de documentos — objetos que contienen uno o varios campos.

Cada índice de Meilisearch es independiente y personalizable, lo que permite individualizar las reglas de posicionamiento de las búsquedas y las opciones de filtrado.

Cómo Crear un Índice y Añadir Documentos

  1. En la barra de navegación, haz clic en la pestaña Índices de tu proyecto.
  2. Haz clic en Crear un índice. A continuación, introduce un nombre de índice (por ejemplo, libros) y haz clic en Crear índice.
  3. Selecciona cómo deseas importar tus documentos. Para esta guía, importa un archivo JSON, que incluye 13 entradas de libros de la API de libros de Google.
  4. Haz clic en Cargar archivo y carga el archivo JSON; a continuación, haz clic en Importar documentos.

Cómo Actualizar y Eliminar Documentos

Actualmente, la Nube de Meilisearch no incluye una forma de modificar o eliminar documentos, pero puedes utilizar las rutas de la API REST o el SDK. El siguiente código muestra cómo actualizar o eliminar documentos utilizando los endpoints de la API REST. Este tutorial utiliza cURL para trabajar con las rutas, pero también puedes utilizar una plataforma API como Postman.

  1. Para actualizar documentos, envía una solicitud a PUT en la siguiente ruta:
    /indexes/{index_uid}/documents

    El index_uid anterior es el nombre del índice de tu proyecto:

    Nombre del índice resaltado.
    Nombre del índice resaltado.

  2. Con esta ruta, puedes añadir o actualizar una lista de documentos si ya existen. Para actualizar un documento, debes adjuntar su clave primaria. El documento antiguo sufre una actualización parcial basada en los campos del nuevo documento. La actualización conserva los campos no incluidos en el nuevo documento, permitiendo que permanezcan inalterados. A continuación se muestra un ejemplo de cómo actualizar el título de un documento en el índice del libro de JavaScript para niños a JavaScript Programación para niños y añadir un campo editor:
    curl \
        -X PUT '/indexes/books/documents' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer ' \
            --data-binary '[
            {
                "id": "71nDBQAAQBAJ",
                "title": "JavaScript Coding for Kids",
                "publisher": "No Starch Press"
            }
        ]'
  3. Sustituye <your-project-url> y <your-admin-api-key> por los valores correspondientes en la página de Resumen de tu proyecto:
    "taskUid": 26, "indexUid": "books", "status": "enqueued", "type": "documentAdditionOrUpdate", "equeuedAt": "2023-05-26T07:52:24.127920065Z"
  4. Para eliminar documentos, Meilisearch incluye tres rutas (endpoints):
    /indexes/{index_uid}/documents // Deleting all documents
    /indexes/{index_uid}/documents/{document_id} // Deleting a single document
    /indexes/{index_uid}/documents/delete-batch // Deleting a selection of  
    documents

    Puedes obtener el document_id de los datos originales del archivo books.json después de obtener el documento de la Nube de MeiliSearch o de tu base de datos.

A continuación se muestra un ejemplo de cómo borrar el libro que actualizaste anteriormente:

curl \
    -H 'Authorization: Bearer ' \
    -X DELETE '/indexes/books/documents/71nDBQAAQBAJ'

Después de enviar la solicitud, tu respuesta debería tener este aspecto:

"taskUid": 10, "indexUid": "books", "status": "enqueued", "type": "documentDeletion", "equeuedAt": "2023-05-26T07:20:11.1291066"

Cómo Añadir MeiliSearch a un Servicio Web

  1. Empieza clonando el proyecto inicial de GitHub ejecutando los siguientes comandos en tu terminal:
    git clone https://github.com/Tammibriggs/meilisearch-app.git
    cd meilisearch​-app
    npm install

    Si compruebas el archivo package.json, deberías ver el comando de inicio. Ejecuta npm start para ejecutar el proyecto Node.js en localhost port3000. Cuando introduzcas http://localhost:3000/ en tu navegador, deberías ver lo siguiente:

    Demostración de la aplicación Meilisearch.
    Demostración de la aplicación Meilisearch.

  2. Una vez que la app esté en funcionamiento, puedes añadirle Meilisearch para que el formulario de búsqueda comience a devolver los resultados de Meilisearch cuando se envíe. Para ello, instala Meilisearch ejecutando el siguiente comando en el terminal:
    npm install meilisearch
  3. También necesitas instalar el paquete dotenv npm para cargar credenciales sensibles desde un archivo .env . Ejecuta el siguiente comando en el terminal:
    npm install dotenv
  4. Crea un archivo .env en la carpeta root del proyecto y añade lo siguiente:
    YOUR_PROJECT_URL= '<your-project-url>'
    YOUR_SEARCH_API_KEY= '<your-admin-api-key>'

    Asegúrate de sustituir <your-project-url> y <your-admin-api-key> por sus valores correspondientes.

  5. A continuación, importa meilisearch y el paquete dotenv al archivo server.js y configura dotenv:
    import {MeiliSearch} from 'meilisearch'
    import dotenv from 'dotenv';
    dotenv.config();
  6. A continuación, inicializa Meilisearch para que puedas empezar a trabajar en tu proyecto books-app. Navega hasta el archivo server.js y añade el siguiente código después de la definición de la variable searchValue:
    const client = new MeiliSearch({ host: process.env.YOUR_PROJECT_URL, apiKey: process.env.YOUR_SEARCH_API_KEY })
  7. Una funcionalidad importante es la búsqueda a través de tu índice de libros en Meilisearch utilizando el valor de búsqueda adjunto a la URL al enviar el formulario. Para activar esta funcionalidad, añade el siguiente código después de la definición de la variable client:
    const index = client.index('books')  
    const searchResults = !!searchValue && await index.search(searchValue)

    Este código crea una referencia al índice del libro. A continuación, utiliza el método search() para buscar documentos que coincidan con el valor de búsqueda en el índice del libro si defines searchValue.

  8. Por último, para mostrar los resultados de la búsqueda, modifica el método render() como sigue:
    res.render('index', {
        books: searchResults ? searchResults.hits : [],
        searchValue
    })

    Ya estás listo para empezar a buscar en el índice del libro:

    Buscando en el índice de 'libros' con el formulario de búsqueda
    Buscando en el índice de ‘libros’ con el formulario de búsqueda

  9. Después de añadir los códigos anteriores, tu archivo server.js debería tener este aspecto:
    import express from 'express';
    import { MeiliSearch } from 'meilisearch';
    import dotenv from 'dotenv';
    dotenv.config();
    
    const app = express();
    const PORT = process.env.PORT || 3000;
    
    app.set('view engine', 'ejs');
    app.use(express.static('public'));
    
    app.get('/', async (req, res) => {
    	const searchValue = req.query.search;
    	const client = new MeiliSearch({
    		host: process.env.YOUR_PROJECT_URL,
    		apiKey: process.env.YOUR_SEARCH_API_KEY,
    	});
    	const index = client.index('books');
    	const searchResults = !!searchValue && (await index.search(searchValue));
    
    	res.render('index', {
    		books: searchResults ? searchResults.hits : [],
    		searchValue,
    	});
    });
    
    app.listen(PORT, () => {
    	console.log(`listening at http://localhost:${PORT}`);
    });

Puedes acceder al código completo de este tutorial en GitHub.

Resumen

Meilisearch es una excelente solución de motor de búsqueda que mejora las capacidades de búsqueda de un sitio web y la experiencia del usuario. Su excepcional velocidad, su algoritmo de posicionamiento centrado en la relevancia y su proceso de integración sin fisuras lo convierten en una herramienta inestimable si quieres optimizar la funcionalidad de búsqueda de tu sitio web.

El servicio de Alojamiento de Aplicaciones de Kinsta eleva sin problemas el rendimiento de las aplicaciones impulsadas por Meilisearch. Con una infraestructura robusta y entornos de servidor optimizados, Kinsta garantiza una rápida funcionalidad de búsqueda, mejorando la experiencia del usuario. La escalabilidad de la plataforma se adapta a las demandas de Meilisearch, garantizando operaciones de búsqueda fiables y eficientes.

¿En qué motor de búsqueda confías para tus proyectos? Háznoslo saber en la sección de comentarios

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).