Por qué autoalojar su motor de búsqueda en un VPS
Un motor de búsqueda dedicado sustituye los lentos LIKE '%...%' por una búsqueda instantánea, tolerante a los errores tipográficos y ordenada por relevancia. Autoalojarlo en un VPS le evita la facturación por número de búsquedas o de documentos de las soluciones SaaS, y mantiene su índice (es decir, los datos de sus clientes y su catálogo) en su propia infraestructura. Meilisearch y Typesense están diseñados para el 'search-as-you-type': respuestas en unos milisegundos, API REST sencilla, tolerancia a errores tipográficos y facetas incluidas. Meilisearch destaca por su facilidad de manejo y por la calidad de la relevancia por defecto; Typesense pone el acento en el rendimiento bruto, el control fino del ranking y el clustering de alta disponibilidad. Ambos mantienen el índice en RAM, lo que dimensiona directamente su VPS.
Las ventajas de un motor de búsqueda autoalojado
- Búsqueda instantánea con tolerancia a errores tipográficos, sin programar el algoritmo
- Ninguna facturación por documento indexado ni por consulta
- Índice y datos de negocio conservados en su VPS
- Facetas, filtros y ordenación para construir interfaces de catálogo ricas
- API REST y claves de alcance restringido para un uso seguro desde el frontend
- Sinónimos y reglas de relevancia ajustables a su vocabulario de negocio
Requisitos: la RAM ante todo
Estos motores mantienen el índice activo en memoria: la RAM es el recurso crítico. Para unas decenas de miles de documentos, 1 o 2 GB de RAM y 1 vCPU bastan. Para cientos de miles o unos millones de documentos con facetas, apunte a 4 GB y 2 vCPU. Un disco SSD acelera la persistencia y la recarga al arrancar. Necesita Docker y Compose, un subdominio (search.sudominio.com) si expone la API al frontend, y un reverse proxy para el TLS. Prevea una clave maestra robusta y claves de búsqueda de alcance limitado para no exponer nunca la clave de administración en el navegador.
Desplegar Meilisearch (o Typesense) en un VPS
Definir el servicio Docker
Declare
getmeili/meilisearch(otypesense/typesense), monte un volumen para la persistencia del índice y pase la clave maestra mediante una variable de entorno (MEILI_MASTER_KEYoTYPESENSE_API_KEY). Vincule el puerto7700/8108únicamente en local.Arrancar y comprobar el estado de salud
Ejecute
docker compose up -dy luego pruebecurl http://127.0.0.1:7700/health. Una respuestaavailableconfirma que el motor está listo para recibir documentos.Crear el índice y cargar los datos
Envíe sus documentos en JSON a través de la API (POST en
/indexes/produits/documents). Defina los atributos buscables, filtrables y ordenables; en un motor de búsqueda, el orden de declaración de los atributos buscables influye directamente en la relevancia.Exponer la API detrás de un reverse proxy
Redirija search.sudominio.com hacia el puerto local con Caddy o Nginx para el HTTPS. Active el CORS únicamente hacia su dominio de aplicación, para que solo su frontend consulte el motor.
Generar claves de alcance restringido
Cree una clave limitada a las operaciones de búsqueda sobre un índice concreto, para usarla en el navegador. La clave maestra no debe salir nunca del servidor ni aparecer en el código del frontend.
Sincronizar con su base de datos
Implemente un job (webhook o tarea programada) que envíe las creaciones y las actualizaciones al índice con cada cambio en la base de datos, para mantener la búsqueda coherente con la fuente de verdad.
Desplace la tabla
| Criterio | Meilisearch | Typesense |
|---|---|---|
| Facilidad de manejo | Muy sencilla, relevancia por defecto excelente | Sencilla, control más explícito |
| Tolerancia a errores tipográficos | Nativa y ajustable | Nativa, configurable por campo |
| Control del ranking | Reglas de clasificación ordenadas | Muy granular (ranking por campo, pesos) |
| Facetas / filtros | Completas | Completas y de alto rendimiento |
| Alta disponibilidad | Replicación en evolución | Clustering Raft integrado |
| Consumo de memoria | Moderado | Optimizado, a menudo más frugal |
| Búsqueda vectorial | Compatible | Compatible |
| Lenguaje / despliegue | Rust, binario único | C++, binario único |
Antes de sobredimensionar su VPS, indexe únicamente los campos realmente buscables. Almacenar un texto HTML completo y pesado en el índice infla la RAM sin necesidad: indexe el título, las etiquetas y un resumen, y mantenga el contenido pesado en la base de datos, recuperado tras el clic. A menudo dividirá entre dos o tres la huella de memoria con una relevancia idéntica.