Instalación Meilisearch · 22 min read · Oct 26, 2025

Cómo instalar y configurar Meilisearch en Debian 12

Meilisearch es un motor de búsqueda de código abierto escrito en el lenguaje Rust. Estar escrito en Rust requiere menos recursos para funcionar y se puede ejecutar utilizando un solo binario de línea de comandos. El proceso de instalación es más simple que el de los motores de búsqueda alternativos y requiere menos pasos. Sus características incluyen coincidencia difusa e indexación sin esquema. Viene con un frontend web para fines de demostración. Se puede integrar en varias aplicaciones web a través de diversas bibliotecas disponibles en múltiples lenguajes como JavaScript, Python, PHP, Ruby, etc.

En este tutorial, aprenderás cómo instalar Meilisearch en producción en un servidor Debian 12 y usarlo para realizar varias búsquedas simples.

Requisitos previos

  • Un servidor que ejecute Debian 12 con un mínimo de 2GB de RAM.

  • Un usuario no root con privilegios sudo.

  • El Firewall sin complicaciones (UFW) está habilitado y en funcionamiento.

  • Un Nombre de Dominio Totalmente Calificado (FQDN) como meilisearch.example.com apuntando a tu servidor. Esto es beneficioso si deseas servir Meilisearch a través de SSL utilizando un servidor proxy.

  • Todo está actualizado. $ sudo apt update && sudo apt upgrade

  • Se requieren algunos paquetes esenciales para el tutorial. Algunos de estos pueden ya estar instalados en tu servidor. $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y

Paso 1 - Configurar el Firewall

El primer paso antes de instalar cualquier paquete es configurar el firewall para permitir conexiones HTTP y HTTPS.

Verifica el estado del firewall.

$ sudo ufw status

Deberías ver algo como lo siguiente.

Estado: activo

Para                         Acción      Desde
--                         ------      ----
OpenSSH                    PERMITIR       En cualquier lugar
OpenSSH (v6)               PERMITIR       En cualquier lugar (v6)

Permite los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Verifica el estado nuevamente para confirmar.

$ sudo ufw status
Estado: activo

Para                         Acción      Desde
--                         ------      ----
OpenSSH                    PERMITIR       En cualquier lugar
80/tcp                     PERMITIR       En cualquier lugar
443/tcp                    PERMITIR       En cualquier lugar
OpenSSH (v6)               PERMITIR       En cualquier lugar (v6)
80/tcp (v6)                PERMITIR       En cualquier lugar (v6)
443/tcp (v6)               PERMITIR       En cualquier lugar (v6)

Paso 2 - Instalar Meilisearch

Hay varias formas de instalar Meilisearch. Usaremos el método más simple que implica copiar el archivo binario a nuestro servidor.

Instala Meilisearch.

$ curl -L https://install.meilisearch.com | sh

Haz que el binario sea ejecutable.

$ chmod +x meilisearch

En este momento, el binario solo es utilizable desde el directorio donde lo descargaste. Para poder usarlo desde cualquier lugar, mueve el archivo binario al directorio /usr/local/bin.

$ sudo mv ./meilisearch /usr/local/bin/

Confirma que Meilisearch está instalado y funcionando correctamente.

$ meilisearch --version
meilisearch 1.7.6

Paso 3 - Crear un usuario del sistema para Meilisearch

Ejecutar Meilisearch como root puede crear problemas de seguridad. Para evitarlos, crea un usuario del sistema para ejecutar Meilisearch.

$ sudo useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearch

Paso 4 - Configurar Meilisearch

Antes de avanzar, necesitamos crear una clave maestra que Meilisearch utiliza para el proceso de autenticación. Puedes usar la utilidad de línea de comandos OpenSSL para crearla. Ejecuta el siguiente comando para crear una clave maestra de 30 caracteres de longitud. Puedes elegir cualquier longitud para tu clave maestra. Cuanto más larga, mejor.

$ openssl rand -hex 30

Deberías recibir una salida similar con una clave de 30 caracteres de longitud. Copia este valor porque lo necesitaremos en los próximos pasos.

65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611

Obtén el último archivo de configuración del repositorio de GitHub de Meilisearch y cópialo al directorio /etc.

$ sudo sh -c 'curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml'

Ábrelo para editar.

$ sudo nano /etc/meilisearch.toml

Actualiza las siguientes líneas en el archivo para configurar la ruta de la base de datos, la ruta de volcado, el directorio de instantáneas y el entorno de trabajo, y agrega la clave maestra que generaste anteriormente para la autenticación.

Los valores actualizados en el archivo de configuración deberían verse como lo siguiente.

env = "producción"
master_key = "173e95f077590ed33dad89247247be8d8ce8b6722ccc87829aaefe3207be"
db_path = "/var/lib/meilisearch/data"
dump_dir = "/var/lib/meilisearch/dumps"
snapshot_dir = "/var/lib/meilisearch/snapshots"

Meilisearch recopila datos anónimamente de forma regular. Deberías desactivarlo utilizando la siguiente opción. Descomenta para desactivar la telemetría de Meilisearch.

no_analytics = true

Por defecto, Meilisearch utiliza no más de dos tercios de la RAM disponible en tu sistema. Puedes controlar esto descomentando y configurando la siguiente variable. También puedes especificar el valor como el número exacto de bytes para ser preciso y exacto.

max_indexing_memory = "1 GiB"

Meilisearch utiliza no más de la mitad de los núcleos de CPU disponibles. Sin embargo, puedes controlar este valor descomentando y configurando la siguiente variable.

max_indexing_threads = 1

Configurar este valor más que el número de núcleos de CPU de la máquina le indicará a Meilisearch que use el número máximo de núcleos disponibles.

Una configuración más que deberías conocer es la cantidad de carga máxima que Meilisearch puede aceptar. El valor predeterminado está establecido en 100MB. Puedes cambiarlo configurando la siguiente variable.

http_payload_size_limit = "100 MB"

Una vez terminado, guarda el archivo presionando Ctrl + X y entrando Y cuando se te solicite.

Paso 5 - Crear directorios y dar permisos

Crea los directorios donde Meilisearch almacenará su base de datos, volúmenes de base de datos e instantáneas.

$ sudo mkdir /var/lib/meilisearch/dumps -p
$ sudo mkdir /var/lib/meilisearch/snapshots

Establece el propietario y el grupo en estos directorios al usuario del sistema que creamos para Meilisearch.

$ sudo chown -R meilisearch:meilisearch /var/lib/meilisearch

Establece el propietario y el grupo en el archivo binario de Meilisearch.

$ sudo chown meilisearch:meilisearch /usr/local/bin/meilisearch

Establece los permisos adecuados en el directorio.

$ sudo chmod 750 /var/lib/meilisearch

Paso 6 - Ejecutar Meilisearch como un servicio

Para hacer que Meilisearch esté disponible en todo momento para solicitudes de búsqueda, es mejor ejecutarlo como un servicio del sistema. Para esto, necesitamos crear un archivo de servicio para él.

Crea y abre /etc/systemd/system/meilisearch.service para editar.

$ sudo nano /etc/systemd/system/meilisearch.service

Pega el siguiente código en él.

[Unit]
Description=Meilisearch
After=systemd-user-sessions.service

[Service]
Type=simple
WorkingDirectory=/var/lib/meilisearch
ExecStart=/usr/local/bin/meilisearch --config-file-path /etc/meilisearch.toml
User=meilisearch
Group=meilisearch

[Install]
WantedBy=multi-user.target

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te solicite.

Habilita el servicio.

$ sudo systemctl enable meilisearch

Inicia el servicio de Meilisearch.

$ sudo systemctl start meilisearch 

Verifica el estado del servicio

$ sudo systemctl status meilisearch

Deberías recibir una salida similar.

? meilisearch.service - Meilisearch
     Cargado: cargado (/etc/systemd/system/meilisearch.service; habilitado; preestablecido: habilitado)
     Activo: activo (en ejecución) desde Vie 2024-05-03 03:02:53 UTC; hace 5s
   PID principal: 1008 (meilisearch)
      Tareas: 6 (límite: 2251)
     Memoria: 23.0M
        CPU: 10ms
     CGroup: /system.slice/meilisearch.service
             ??1008 /usr/local/bin/meilisearch --config-file-path /etc/meilisearch.toml

May 03 03:02:53 meilisearch meilisearch[1008]: Fecha de compromiso:                "desconocido"
May 03 03:02:53 meilisearch meilisearch[1008]: Versión del paquete:        "1.7.6"
May 03 03:02:53 meilisearch meilisearch[1008]: Telemetría anónima:        "Desactivada"
May 03 03:02:53 meilisearch meilisearch[1008]: Se ha establecido una clave maestra. Las solicitudes a Meilisearch no serán autorizadas a menos que proporciones una clave de autenticación.
May 03 03:02:53 meilisearch meilisearch[1008]: ¡Consulta Meilisearch Cloud!        https://www.meilisearch.com/cloud?utm_campaign=oss&utm_source=engine&utm_medium=cli
May 03 03:02:53 meilisearch meilisearch[1008]: Documentación:                        https://www.meilisearch.com/docs
May 03 03:02:53 meilisearch meilisearch[1008]: Código fuente:                        https://github.com/meilisearch/meilisearch
May 03 03:02:53 meilisearch meilisearch[1008]: Discord:                        https://discord.meilisearch.com
May 03 03:02:53 meilisearch meilisearch[1008]: 2024-05-03T03:02:53.891366Z  INFO actix_server::builder: iniciando 2 trabajadores
May 03 03:02:53 meilisearch meilisearch[1008]: 2024-05-03T03:02:53.891396Z  INFO actix_server::server: Actix runtime encontrado; iniciando en Actix runtime

Meilisearch está instalado y en funcionamiento. Expondremos el servicio al exterior utilizando el servidor Nginx como un proxy inverso y usaremos Let’s Encrypt para servirlo a través de SSL.

Paso 7 - Instalar Nginx

Debian 12 viene con una versión más antigua de Nginx. Necesitas descargar el repositorio oficial de Nginx para instalar la última versión.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Agrega el repositorio para la versión principal de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación. En sistemas Debian, el siguiente comando solo funcionará con sudo.

$ sudo nginx -v
nginx version: nginx/1.25.5

Inicia el servidor Nginx.

$ sudo systemctl start nginx

Verifica el estado del servicio.

$ sudo systemctl status nginx
? nginx.service - nginx - servidor web de alto rendimiento
     Cargado: cargado (/lib/systemd/system/nginx.service; habilitado; preestablecido: habilitado)
     Activo: activo (en ejecución) desde Vie 2024-05-03 03:04:02 UTC; hace 5s
       Docs: https://nginx.org/en/docs/
    Proceso: 1699 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (código=salió, estado=0/ÉXITO)
   PID principal: 1700 (nginx)
      Tareas: 3 (límite: 2251)
     Memoria: 2.9M
        CPU: 7ms
     CGroup: /system.slice/nginx.service
             ??1700 "nginx: proceso maestro /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??1701 "nginx: proceso de trabajo"
             ??1702 "nginx: proceso de trabajo"

May 03 03:04:02 meilisearch systemd[1]: Iniciando nginx.service - nginx - servidor web de alto rendimiento...
May 03 03:04:02 meilisearch systemd[1]: Iniciado nginx.service - nginx - servidor web de alto rendimiento.

Paso 8 - Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Debian o obtener la última versión utilizando la herramienta Snapd. Usaremos la versión de Snapd.

Debian 12 no viene con Snapd instalado. Instala el paquete Snapd.

$ sudo apt install -y snapd

Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd esté actualizada.

$ sudo snap install core && sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Usa el siguiente comando para asegurarte de que el comando Certbot pueda ejecutarse creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifica si Certbot está funcionando correctamente.

$ certbot --version
certbot 2.10.0

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d meilisearch.example.com

El comando anterior descargará un certificado al directorio /etc/letsencrypt/live/meilisearch.example.com en tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Verifica la lista de temporizadores de systemd. Certbot instala y comienza automáticamente un temporizador para fines de renovación.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

NEXT                        LEFT           LAST                        PASSED    UNIT                        ACTIVATES                   ---------------------------------------------------------------------------------------------------------------------------------------  
Vie 2024-05-03 17:17:15 UTC 14h left      Vie 2024-05-03 02:54:42 UTC 11min ago apt-daily.timer              apt-daily.service
Vie 2024-05-03 06:42:20 UTC 3h 36min left Vie 2024-05-03 02:54:42 UTC 11min ago apt-daily-upgrade.timer      apt-daily-upgrade.service
Vie 2024-05-03 10:39:00 UTC 7h left       -                           -         snap.certbot.renew.timer     snap.certbot.renew.service

Haz una prueba del proceso para verificar si la renovación de SSL está funcionando bien.

$ sudo certbot renew --dry-run

Si no ves errores, estás listo. Tu certificado se renovará automáticamente.

Paso 9 - Configurar Nginx

Abre el archivo /etc/nginx/nginx.conf para editar.

$ sudo nano /etc/nginx/nginx.conf

Agrega la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size 64;

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te solicite.

Crea y abre el archivo /etc/nginx/conf.d/meilisearch.conf para editar.

$ sudo nano /etc/nginx/conf.d/meilisearch.conf

Pega el siguiente código en él. Reemplaza meilisearch.example.com con tu nombre de dominio.

server {

    listen 443 ssl;
    listen [::]:443 ssl;

    http2 on;
    http3 on;
    quic_retry on;

    server_name meilisearch.example.com;

    access_log  /var/log/nginx/meilisearch.access.log;
    error_log   /var/log/nginx/meilisearch.error.log;

    ssl_certificate      /etc/letsencrypt/live/meilisearch.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/meilisearch.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/meilisearch.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_early_data on;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        proxy_pass http://localhost:7700;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
# forzar HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  meilisearch.example.com;
    return 301   https://$host$request_uri;
}

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te solicite.

Verifica tu configuración de Nginx.

$ sudo nginx -t

Reinicia el servidor Nginx.

$ sudo systemctl restart nginx

Meilisearch ahora está en funcionamiento y disponible a través de la URL https://meilisearch.example.com. Deberías ver el siguiente texto cuando abras la URL.

{"status":"Meilisearch está en funcionamiento"}

Esta URL solo se puede usar para buscar a través de la línea de comandos. Si deseas acceder a Meilisearch a través de un frontend, necesitarás integrarlo con otro CMS o software para que funcione, lo cual está fuera del alcance de este tutorial. Meilisearch viene con una interfaz frontend incorporada, pero eso solo funciona si lo estás utilizando para fines de desarrollo. Puedes cambiar el entorno de la instancia a desarrollo en el archivo de configuración y reiniciar Meilisearch para activar la interfaz. Debería verse algo como lo siguiente.

Panel de búsqueda de desarrollo de Meilisearch

Para un entorno de producción, necesitarás integrar Meilisearch con otro CMS.

Comencemos a usarlo para indexar algunos documentos y usarlo para buscar.

Paso 10 - Cargando datos de muestra en Meilisearch

El proyecto Meilisearch proporciona un archivo de película en formato JSON de muestra con los datos extraídos de The Movie Database (TMDB). Descarga el archivo.

$ wget https://www.meilisearch.com/movies.json

Puedes ejecutar el comando tail para ver una parte de los datos. Debería verse como lo siguiente.

$ tail -n 3 movies.json

{"id":460070,"title":"J.T. LeRoy","overview":"Una joven llamada Savannah Knoop pasa seis años pretendiendo ser un escritor transgénero llamado JT Leroy, la persona literaria inventada de su cuñada.","genres":["Drama"],"poster":"https://image.tmdb.org/t/p/w500/43ffZhMCWQhzMneGP4kDWoPV48X.jpg","release_date":1556236800},
{"id":460071,"title":"Lizzie","overview":"Massachusetts, 1892. Una mujer soltera de 32 años y un marginado social, Lizzie vive una vida claustrofóbica bajo el frío y dominante control de su padre. Cuando Bridget Sullivan, una joven sirvienta, viene a trabajar para la familia, Lizzie encuentra un espíritu afín y amable, y una intimidad secreta pronto florece en un plan malvado.","genres":["Crimen","Drama","Suspenso"],"poster":"https://image.tmdb.org/t/p/w500/z2iuBcwznen3kC9z4LeOzBSz1BB.jpg","release_date":1536883200}
]

Como puedes ver, cada entrada individual contiene un id, un título, un enlace a la imagen del cartel, un resumen de la película, una fecha de lanzamiento y una lista de géneros. La fecha de lanzamiento está en formato EPOCH.

Carguemos los datos en Meilisearch utilizando curl a través de una solicitud HTTP POST.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/documents' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' \
  --data-binary @movies.json

Repasemos los argumentos del comando:

  • -X POST - especifica que estamos realizando una solicitud HTTP POST y enviando datos.
  • -H Content-Type - especifica el tipo de contenido del archivo.
  • -H Authorization: Bearer - es para pasar la clave maestra con tus solicitudes.
  • –data-binary - especifica el archivo que se incluirá.

Aquí estamos creando un nuevo índice de Meilisearch en la ubicación /indexes/movies/documents. Deberías recibir una salida similar que te diga que la solicitud ha sido encolada. Meilisearch procesa todas las solicitudes de forma asíncrona.

{"taskUid":0,"indexUid":"movies","status":"enqueued","type":"documentAdditionOrUpdate","enqueuedAt":"2024-05-03T03:12:55.599798591Z"}

También puedes ejecutar el comando anterior reemplazando la URL http://localhost:7700 con https://meilisearch.example.com y funcionará de la misma manera. Puedes hacerlo para todos los comandos en este tutorial, pero por simplicidad, nos quedaremos con la URL http://localhost:7700.

Ejecuta el siguiente comando para verificar el estado de la solicitud.

$ curl -X GET 'http://localhost:7700/indexes/movies/tasks/0'

Deberías recibir una salida similar.

{"uid":0,"indexUid":"movies","status":"succeeded","type":"documentAddition","details":{"receivedDocuments":19547,"indexedDocuments":19546},"duration":"PT29.866920116S","enqueuedAt":"2024-05-03T03:13:18.233702815Z","startedAt":"2024-05-03T03:19:45.370142371Z","finishedAt":"2024-05-03T03:20:05.108395540Z"}

Esto nos dice que la tarea se ha completado y la base de datos de películas ahora está completamente indexada y lista para usar.

Paso 11 - Usar claves limitadas para buscar

Hay una herramienta que necesitamos que ayuda con el formato JSON legible en la línea de comandos. Se llama jq. Ejecuta el siguiente comando para instalarlo.

$ sudo apt install -y jq

A pesar de que agregamos la clave maestra al archivo de configuración, necesitarás pasarla nuevamente con cada solicitud. Antes de continuar, necesitamos una clave más restringida que habilite el modo de solo lectura. Meilisearch crea una clave de solo lectura predeterminada por defecto. Vamos a obtenerla.

$ curl -X GET 'http://localhost:7700/keys' -H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' | jq

Deberías ver una salida similar.

{
  "results": [
    {
      "name": "Clave API de búsqueda predeterminada",
      "description": "Úsala para buscar desde el frontend",
      "key": "591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a",
      "uid": "d004073b-b813-4016-82cb-7995df5149f6",
      "actions": [
        "search"
      ],
      "indexes": [
        "*"
      ],
      "expiresAt": null,
      "createdAt": "2024-05-03T03:02:53.887256411Z",
      "updatedAt": "2024-05-03T03:02:53.887256411Z"
    },
    {
      "name": "Clave API de administrador predeterminada",
      "description": "Úsala para cualquier cosa que no sea una operación de búsqueda. ¡Cuidado! No la expongas en un frontend público",
      "key": "0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196",
      "uid": "b4fc2f96-4347-4750-9ba6-2da73c26e2bd",
      "actions": [
        "*"
      ],
      "indexes": [
        "*"
      ],
      "expiresAt": null,
      "createdAt": "2024-05-03T03:02:53.886580786Z",
      "updatedAt": "2024-05-03T03:02:53.886580786Z"
    }
  ],
  "offset": 0,
  "limit": 20,
  "total": 2
}

A partir de ahora, usaremos la clave API de búsqueda predeterminada para realizar búsquedas.

Paso 12 - Buscar a través de datos de muestra

Hay dos formas de buscar utilizando Meilisearch, puedes usar la API a través de la línea de comandos o usar la interfaz web. La interfaz web es bastante limitada y solo funciona si usas Meilisearch en un entorno de desarrollo, y la API es la forma recomendada de usar Meilisearch. Dado que hemos configurado nuestra búsqueda para producción, solo utilizaremos el método de línea de comandos.

Buscar a través de la API es como cargar datos a través de una solicitud HTTP POST. Haces una solicitud al punto final /search de la API. Por ejemplo, busquemos cualquier película con la palabra saint en ella.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
  --data-binary '{ "q": "saint" }' | jq

Deberías recibir una salida formateada en JSON como la siguiente.

{
  "hits": [
    {
      "id": 25248,
      "title": "Saint Ralph",
      "overview": "Esta comedia/drama canadiense, ambientada en Hamilton, Ontario en 1954, es una dulce y - a veces - tonta historia que se vuelve cada vez más conmovedora a medida que pasan los minutos. Es la historia ficticia de un noveno grado desviado, Ralph (Adam Butcher), que vive secretamente por su cuenta mientras su madre viuda y hospitalizada permanece sumida en un coma. Frecuentemente en problemas con el Padre Fitzpatrick (Gordon Pinsent), el director de su escuela católica de solo chicos, Ralph es considerado una especie de broma entre sus compañeros hasta que decide realizar un milagro que podría salvar a su madre, es decir, ganar el Maratón de Boston. Entrenado por un sacerdote más joven y ex corredor, el Padre Hibbert (Campbell Scott), cuyo cinismo ha sido levantado por la pura esperanza del chico, Ralph se aplica a su improbable misión, enfrentándose a los detractores y recibiendo ayuda a lo largo de un camino muy desafiante de diversos aliados y amigos.",
      "genres": [
        "Comedia",
        "Drama"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
      "release_date": 1123200000
    },
    {
      "id": 26894,
      "title": "Saint Sinner",
      "overview": "En 1815, un monje, Tomas Alcala, desata involuntariamente a dos hembras súcubos, Munkar y Nakir, sobre un desprevenido siglo XXI. Él es elegido por Dios para viajar a través de los siglos y detener la rampa de los demonios.",
      "genres": [
        "Fantasía",
        "Horror",
        "Ciencia Ficción",
        "Película de TV"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/cxljKsfUI6PVFPIgPvsesUWHai4.jpg",
      "release_date": 1035590400
    },
    {
      "id": 27023,
      "title": "Saint John of Las Vegas",
      "overview": "Un exjugador es atraído de nuevo al juego por un investigador veterano de fraude de seguros.",
      "genres": [
        "Comedia"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/kN4Vur1SccouDR0k3tmJXJHdrXw.jpg",
      "release_date": 1264723200
    },
  ...

Para probar la función de coincidencia difusa de Meilisearch en la que se pueden usar palabras que suenan similares para encontrar la búsqueda exacta. Esto es útil en caso de que cometas un error tipográfico y aún esperes el resultado correcto.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
  --data-binary '{ "q": "seint" }' | jq

Aquí, hemos escrito mal saint como seint y Meilisearch aún devolverá entradas con la palabra saint.

{
  "hits": [
    {
      "id": 10105,
      "title": "Saints and Soldiers",
      "overview": "Cinco soldados estadounidenses que luchan en Europa durante la Segunda Guerra Mundial luchan por regresar al territorio aliado después de ser separados de las fuerzas estadounidenses durante la histórica Masacre de Malmedy.",
      "genres": [
        "Guerra",
        "Drama",
        "Acción",
        "Aventura",
        "Historia"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/efhqxap8fLi4v1GEXVvakey0z3S.jpg",
      "release_date": 1063238400
    },
    {
      "id": 25248,
      "title": "Saint Ralph",
      "overview": "Esta comedia/drama canadiense, ambientada en Hamilton, Ontario en 1954, es una dulce y - a veces - tonta historia que se vuelve cada vez más conmovedora a medida que pasan los minutos. Es la historia ficticia de un noveno grado desviado, Ralph (Adam Butcher), que vive secretamente por su cuenta mientras su madre viuda y hospitalizada permanece sumida en un coma. Frecuentemente en problemas con el Padre Fitzpatrick (Gordon Pinsent), el director de su escuela católica de solo chicos, Ralph es considerado una especie de broma entre sus compañeros hasta que decide realizar un milagro que podría salvar a su madre, es decir, ganar el Maratón de Boston. Entrenado por un sacerdote más joven y ex corredor, el Padre Hibbert (Campbell Scott), cuyo cinismo ha sido levantado por la pura esperanza del chico, Ralph se aplica a su improbable misión, enfrentándose a los detractores y recibiendo ayuda a lo largo de un camino muy desafiante de diversos aliados y amigos.",
      "genres": [
        "Comedia",
        "Drama"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
      "release_date": 1123200000
    },
    {
      "id": 26894,
      "title": "Saint Sinner",
      "overview": "En 1815, un monje, Tomas Alcala, desata involuntariamente a dos hembras súcubos, Munkar y Nakir, sobre un desprevenido siglo XXI. Él es elegido por Dios para viajar a través de los siglos y detener la rampa de los demonios.",
      "genres": [
        "Fantasía",
        "Horror",
        "Ciencia Ficción",
        "Película de TV"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/cxljKsfUI6PVFPIgPvsesUWHai4.jpg",
      "release_date": 1035590400
    },
 …

Paso 13 - Ajustar el ranking de búsqueda y filtrar datos

Los motores de búsqueda pueden devolver mejores resultados si saben cómo clasificar o dar importancia a ciertos resultados en función de la importancia de un campo particular. Meilisearch tiene un conjunto predeterminado de reglas de sesgo que puedes configurar para mejorar tus resultados de búsqueda.

Pero primero, necesitamos verificar las reglas de clasificación establecidas por Meilisearch.

$ curl -X GET 'http://localhost:7700/indexes/movies/settings/ranking-rules' -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196'

Recibirás la siguiente salida.

["words","typo","proximity","attribute","sort","exactness"]
  1. words - los resultados se ordenan por el número decreciente de términos coincidentes.
  2. typo - los resultados se ordenan por el número creciente de errores tipográficos. Menos consultas con errores tipográficos se devuelven en la parte superior.
  3. proximity - los resultados se ordenan por la distancia creciente entre términos coincidentes.
  4. attribute - los resultados se ordenan por el orden de clasificación de atributos.
  5. sort - los resultados se ordenan de acuerdo con los parámetros decididos en el momento de la consulta.
  6. exactness - los resultados se ordenan por la similitud de las palabras coincidentes con las palabras de la consulta.

Puedes leer más sobre la relevancia en la documentación oficial de Meilisearch.

Emite el siguiente comando para cambiar el orden de las reglas de sesgo.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/settings/ranking-rules' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196' \
  --data-binary '[
      "words",
      "typo",
      "proximity",
      "release_date:asc",
      "attribute",
      "sort",
      "exactness",
      "rank:desc"
  ]'

Ahora filtremos los resultados de búsqueda. Primero, pidamos a Meilisearch que use solo ciertos atributos para realizar la búsqueda y dejar de lado los atributos sin sentido como id.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/settings' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196' \
  --data-binary '{
      "searchableAttributes": [
          "title",
          "overview",
          "genres"
      ]
  }'

Aquí, estamos realizando una búsqueda utilizando solo los atributos title, overview y genres que darán mejores resultados.

A continuación, podemos formatear nuestros resultados de búsqueda para mostrar solo ciertos atributos mientras ocultamos los demás.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/settings/displayedAttributes' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196' \
  --data-binary '[
          "title",
          "overview",
          "genres",
          "release_date"
      ]'

Esto solo mostrará los atributos que hemos incluido en nuestra consulta con los resultados.

Finalmente, también puedes proporcionar una lista de atributos para ser filtrados o clasificados. Esto incluye tanto filtrado cuantitativo utilizando operadores matemáticos como < o > y filtrado a través de inclusión en un conjunto especificado. Esto también se llama búsqueda facetada.

$ curl \
  -X PATCH 'http://localhost:7700/indexes/movies/settings' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196' \
  --data-binary '{
      "filterableAttributes": [
          "genres",
          "release_date"
      ],
      "sortableAttributes": [
          "release_date"
      ]
  }'

Podemos combinar todas estas reglas para realizar una consulta como la siguiente.

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
  --data-binary '{ "q": "house", "sort": ["release_date:desc"], "filter": "genres = Horror" }' | jq

Aquí estamos buscando todas las películas en el género de Horror desde la más nueva hasta la más antigua que contengan la palabra house en el título. Deberías recibir una salida similar.

{
  "hits": [
    {
      "id": 440559,
      "title": "Housesitters",
      "overview": "Angie e Izzy obtienen un trabajo de casasitting que parece demasiado bueno para ser verdad. Surgen escalofriantes travesuras sobrenaturales.",
      "genres": [
        "Comedia",
        "Horror"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/9Gnu0PBdYzyd7ZkO74XK0xCH0iY.jpg",
      "release_date": 1524873600
    },
    {
      "id": 449550,
      "title": "Housewife",
      "overview": "Housewife se centra en Holly cuya madre asesinó a su hermana y padre cuando tenía siete años. 20 años después y perdiendo lentamente su agarre sobre la diferencia entre la realidad y las pesadillas, se encuentra con un psíquico famoso que afirma que está destinado a ayudarla.",
      "genres": [
        "Horror"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/ohHxS7PIRQb9O6KTrDtqYshYGts.jpg",
      "release_date": 1504828800
    },
    {
      "id": 392703,
      "title": "House of Darkness",
      "overview": "Inspirado en eventos reales, el thriller sobrenatural 'House of Darkness' relata el misterioso caso de una familia de San Francisco que afirmó que una fuerza oscura fue responsable de los trágicos eventos que se desarrollaron. Intentando salvar su matrimonio en apuros, Kelly (Sara Fletcher, 'Adulthood'), su esposo Brian (Gunner Wright, 'J. Edgar') y su hija Sarah (Mykayla Sohn, 'The Chosen') se mudan a una granja rural en busca de serenidad. Sin saberlo, casi cada familia que ha vivido en la casa ha sufrido alguna forma de tragedia, que data de hace casi 100 años. Poco después de su llegada, Kelly comienza a sentir que el comportamiento de su esposo se vuelve cada vez más extraño y violento. Kelly también descubre que las voces que escucha resonando a través de los pasillos no provienen de su hija. ¿Serán Kelly y su familia las próximas víctimas de las fuerzas oscuras en la casa?",
      "genres": [
        "Horror",
        "Thriller",
        "Película de TV"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/ueQM9RsT0HLL2RuuiLmD07j8lKB.jpg",
      "release_date": 1460851200
    },
…

Paso 14 - Conclusión

Has terminado de instalar y configurar Meilisearch en un entorno de producción en un servidor Debian 12. También realizaste algunas búsquedas básicas y aprendiste cómo mejorar los resultados de búsqueda a través de la clasificación y el filtrado. Si tienes alguna pregunta, publícalas en los comentarios a continuación.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.