Meilisearch · 21 min read · Oct 26, 2025
Come installare e configurare Meilisearch su Debian 12

Meilisearch è un motore di ricerca open-source scritto in linguaggio Rust. Essendo scritto in Rust richiede meno risorse per funzionare e può essere eseguito utilizzando un singolo file binario da riga di comando. Il processo di installazione è più semplice rispetto agli altri motori di ricerca e richiede meno passaggi. Le sue caratteristiche includono il fuzzy matching e l’indicizzazione senza schema. Viene fornito con un’interfaccia web per scopi dimostrativi. Può essere integrato in varie applicazioni web attraverso diverse librerie disponibili in più linguaggi come JavaScript, Python, PHP, Ruby, ecc.
In questo tutorial, imparerai come installare Meilisearch in produzione su un server Debian 12 e usarlo per eseguire diverse ricerche semplici.
Prerequisiti
Un server che esegue Debian 12 con un minimo di 2GB di RAM.
Un utente non root con privilegi sudo.
Il Firewall semplice (UFW) è abilitato e in esecuzione.
Un Nome di Dominio Completo (FQDN) come
meilisearch.example.comche punta al tuo server. Questo è utile se desideri servire Meilisearch tramite SSL utilizzando un server proxy.Tutto è aggiornato.
$ sudo apt update && sudo apt upgradeAlcuni pacchetti essenziali sono richiesti per il tutorial. Alcuni di questi potrebbero già essere installati sul tuo server.
$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
Passo 1 - Configurare il Firewall
Il primo passo prima di installare qualsiasi pacchetto è configurare il firewall per consentire le connessioni HTTP e HTTPS.
Controlla lo stato del firewall.
$ sudo ufw statusDovresti vedere qualcosa di simile al seguente.
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)Consenti le porte HTTP e HTTPS.
$ sudo ufw allow http
$ sudo ufw allow httpsControlla di nuovo lo stato per confermare.
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)Passo 2 - Installare Meilisearch
Ci sono diversi modi per installare Meilisearch. Utilizzeremo il metodo più semplice che prevede la copia del file binario sul nostro server.
Installa Meilisearch.
$ curl -L https://install.meilisearch.com | shRendi il binario eseguibile.
$ chmod +x meilisearchIn questo momento il binario è utilizzabile solo dalla directory in cui lo hai scaricato. Per poterlo utilizzare da qualsiasi parte, sposta il file binario nella directory /usr/local/bin.
$ sudo mv ./meilisearch /usr/local/bin/Conferma che Meilisearch è installato e funzionante correttamente.
$ meilisearch --version
meilisearch 1.7.6Passo 3 - Creare un utente di sistema per Meilisearch
Eseguire Meilisearch come root può creare problemi di sicurezza. Per evitarli, crea un utente di sistema per eseguire Meilisearch.
$ sudo useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearchPasso 4 - Configurare Meilisearch
Prima di procedere, dobbiamo creare una chiave master che Meilisearch utilizza per il processo di autenticazione. Puoi utilizzare l’utilità da riga di comando OpenSSL per crearla. Esegui il seguente comando per creare una chiave master lunga 30 caratteri. Puoi scegliere qualsiasi lunghezza per la tua chiave master. Più lunga è, meglio è.
$ openssl rand -hex 30Dovresti ricevere un output simile con una chiave lunga 30 caratteri. Copia questo valore perché ne avremo bisogno nei passaggi successivi.
65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611Prendi l’ultimo file di configurazione dal repository GitHub di Meilisearch e copialo nella directory /etc.
$ sudo sh -c 'curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml'Aprilo per la modifica.
$ sudo nano /etc/meilisearch.tomlAggiorna le seguenti righe nel file per configurare il percorso del database, il percorso del dump, la directory degli snapshot e l’ambiente di lavoro, e aggiungi la chiave master che hai generato prima per l’autenticazione.
I valori aggiornati nel file di configurazione dovrebbero apparire come segue.
env = "production"
master_key = "173e95f077590ed33dad89247247be8d8ce8b6722ccc87829aaefe3207be"
db_path = "/var/lib/meilisearch/data"
dump_dir = "/var/lib/meilisearch/dumps"
snapshot_dir = "/var/lib/meilisearch/snapshots"Meilisearch raccoglie dati regolari in modo anonimo. Dovresti disabilitarlo utilizzando la seguente opzione. Decommentalo per disattivare la telemetria di Meilisearch.
no_analytics = truePer impostazione predefinita, Meilisearch utilizza non più di due terzi della RAM disponibile sul tuo sistema. Puoi controllare questo decommentando e impostando la seguente variabile. Puoi anche specificare il valore come numero esatto di byte per essere preciso e accurato.
max_indexing_memory = "1 GiB"Meilisearch utilizza non più della metà dei core CPU disponibili. Puoi, tuttavia, controllare questo valore decommentando e impostando la seguente variabile.
max_indexing_threads = 1Impostare questo valore superiore al numero di core CPU della macchina dirà a Meilisearch di utilizzare il numero massimo di core disponibili.
Un’altra impostazione che dovresti conoscere è la quantità massima di payload che Meilisearch può gestire. Il valore predefinito è impostato a 100MB. Puoi cambiarlo configurando la seguente variabile.
http_payload_size_limit = "100 MB"Una volta terminato, salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Passo 5 - Creare directory e dare permessi
Crea le directory in cui Meilisearch memorizzerà il suo database, i dump del database e gli snapshot.
$ sudo mkdir /var/lib/meilisearch/dumps -p
$ sudo mkdir /var/lib/meilisearch/snapshotsImposta il proprietario e il gruppo su queste directory all’utente di sistema che abbiamo creato per Meilisearch.
$ sudo chown -R meilisearch:meilisearch /var/lib/meilisearchImposta il proprietario e il gruppo sul file binario di Meilisearch.
$ sudo chown meilisearch:meilisearch /usr/local/bin/meilisearchImposta i permessi appropriati sulla directory.
$ sudo chmod 750 /var/lib/meilisearchPasso 6 - Eseguire Meilisearch come servizio
Per rendere Meilisearch disponibile in ogni momento per le richieste di ricerca, è meglio eseguirlo come servizio di sistema. Per questo, dobbiamo creare un file di servizio per esso.
Crea e apri /etc/systemd/system/meilisearch.service per la modifica.
$ sudo nano /etc/systemd/system/meilisearch.serviceIncolla il seguente codice in esso.
[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.targetSalva il file premendo Ctrl + X e inserendo Y quando richiesto.
Abilita il servizio.
$ sudo systemctl enable meilisearchAvvia il servizio Meilisearch.
$ sudo systemctl start meilisearch Controlla lo stato del servizio
$ sudo systemctl status meilisearchDovresti ricevere un output simile.
? meilisearch.service - Meilisearch
Loaded: loaded (/etc/systemd/system/meilisearch.service; enabled; preset: enabled)
Active: active (running) since Fri 2024-05-03 03:02:53 UTC; 5s ago
Main PID: 1008 (meilisearch)
Tasks: 6 (limit: 2251)
Memory: 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]: Commit date: "unknown"
May 03 03:02:53 meilisearch meilisearch[1008]: Package version: "1.7.6"
May 03 03:02:53 meilisearch meilisearch[1008]: Anonymous telemetry: "Disabled"
May 03 03:02:53 meilisearch meilisearch[1008]: A master key has been set. Requests to Meilisearch won't be authorized unless you provide an authentication key.
May 03 03:02:53 meilisearch meilisearch[1008]: Check out Meilisearch Cloud! https://www.meilisearch.com/cloud?utm_campaign=oss&utm_source=engine&utm_medium=cli
May 03 03:02:53 meilisearch meilisearch[1008]: Documentation: https://www.meilisearch.com/docs
May 03 03:02:53 meilisearch meilisearch[1008]: Source code: 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: starting 2 workers
May 03 03:02:53 meilisearch meilisearch[1008]: 2024-05-03T03:02:53.891396Z INFO actix_server::server: Actix runtime found; starting in Actix runtimeMeilisearch è installato e in esecuzione. Esponiamo il servizio all’esterno utilizzando il server Nginx come reverse proxy e utilizziamo Let’s Encrypt per servirlo tramite SSL.
Passo 7 - Installare Nginx
Debian 12 viene fornito con una versione più vecchia di Nginx. Devi scaricare il repository ufficiale di Nginx per installare l’ultima versione.
Importa la chiave di firma di Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/nullAggiungi il repository per la versione principale di 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.listAggiorna i repository di sistema.
$ sudo apt updateInstalla Nginx.
$ sudo apt install nginxVerifica l’installazione. Sui sistemi Debian, il seguente comando funzionerà solo con sudo.
$ sudo nginx -v
nginx version: nginx/1.25.5Avvia il server Nginx.
$ sudo systemctl start nginxControlla lo stato del servizio.
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Fri 2024-05-03 03:04:02 UTC; 5s ago
Docs: https://nginx.org/en/docs/
Process: 1699 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 1700 (nginx)
Tasks: 3 (limit: 2251)
Memory: 2.9M
CPU: 7ms
CGroup: /system.slice/nginx.service
??1700 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??1701 "nginx: worker process"
??1702 "nginx: worker process"
May 03 03:04:02 meilisearch systemd[1]: Starting nginx.service - nginx - high performance web server...
May 03 03:04:02 meilisearch systemd[1]: Started nginx.service - nginx - high performance web server.Passo 8 - Installare SSL
Dobbiamo installare Certbot per generare il certificato SSL. Puoi installare Certbot utilizzando il repository di Debian o scaricare l’ultima versione utilizzando lo strumento Snapd. Useremo la versione Snapd.
Debian 12 non viene fornito con Snapd installato. Installa il pacchetto Snapd.
$ sudo apt install -y snapdEsegui i seguenti comandi per assicurarti che la tua versione di Snapd sia aggiornata.
$ sudo snap install core && sudo snap refresh coreInstalla Certbot.
$ sudo snap install --classic certbotUsa il seguente comando per assicurarti che il comando Certbot possa essere eseguito creando un collegamento simbolico alla directory /usr/bin.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbotVerifica se Certbot funziona correttamente.
$ certbot --version
certbot 2.10.0Esegui il seguente comando per generare un certificato SSL.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d meilisearch.example.comIl comando sopra scaricherà un certificato nella directory /etc/letsencrypt/live/meilisearch.example.com sul tuo server.
Genera un certificato Diffie-Hellman group.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096Controlla l’elenco dei timer di systemd. Certbot installa e avvia automaticamente un timer per il rinnovo.
$ sudo systemctl list-timersTroverai snap.certbot.renew.service come uno dei servizi programmati per l’esecuzione.
NEXT LEFT LAST PASSED UNIT ACTIVATES ---------------------------------------------------------------------------------------------------------------------------------------
Fri 2024-05-03 17:17:15 UTC 14h left Fri 2024-05-03 02:54:42 UTC 11min ago apt-daily.timer apt-daily.service
Fri 2024-05-03 06:42:20 UTC 3h 36min left Fri 2024-05-03 02:54:42 UTC 11min ago apt-daily-upgrade.timer apt-daily-upgrade.service
Fri 2024-05-03 10:39:00 UTC 7h left - - snap.certbot.renew.timer snap.certbot.renew.serviceFai un dry run del processo per controllare se il rinnovo SSL funziona correttamente.
$ sudo certbot renew --dry-runSe non vedi errori, sei a posto. Il tuo certificato si rinnoverà automaticamente.
Passo 9 - Configurare Nginx
Apri il file /etc/nginx/nginx.conf per la modifica.
$ sudo nano /etc/nginx/nginx.confAggiungi la seguente riga prima della riga include /etc/nginx/conf.d/*.conf;.
server_names_hash_bucket_size 64;Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Crea e apri il file /etc/nginx/conf.d/meilisearch.conf per la modifica.
$ sudo nano /etc/nginx/conf.d/meilisearch.confIncolla il seguente codice in esso. Sostituisci meilisearch.example.com con il tuo nome di 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;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name meilisearch.example.com;
return 301 https://$host$request_uri;
}Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Verifica la tua configurazione Nginx.
$ sudo nginx -tRiavvia il server Nginx.
$ sudo systemctl restart nginxMeilisearch è ora in esecuzione e disponibile tramite l’URL https://meilisearch.example.com. Dovresti vedere il seguente testo quando apri l’URL.
{"status":"Meilisearch is running"}Questo URL può essere utilizzato solo per la ricerca tramite la riga di comando. Se desideri accedere a Meilisearch tramite un frontend, dovrai integrarlo con un altro CMS o software per farlo funzionare, il cui scopo è al di fuori di questo tutorial. Meilisearch viene fornito con un’interfaccia frontend integrata, ma funziona solo se lo stai utilizzando per scopi di sviluppo. Puoi cambiare l’ambiente dell’istanza in development nel file di configurazione e riavviare Meilisearch per attivare l’interfaccia. Dovrebbe apparire simile al seguente.

Per un ambiente di produzione, dovrai integrare Meilisearch con un altro CMS.
Iniziamo a usarlo per indicizzare alcuni documenti e utilizzarlo per la ricerca.
Passo 10 - Caricamento di dati di esempio in Meilisearch
Il progetto Meilisearch fornisce un file di film in formato JSON di esempio con i dati estratti da The Movie Database (TMDB). Scarica il file.
$ wget https://www.meilisearch.com/movies.jsonPuoi eseguire il comando tail per vedere una parte dei dati. Dovrebbe apparire simile al seguente.
$ tail -n 3 movies.json
{"id":460070,"title":"J.T. LeRoy","overview":"Una giovane donna di nome Savannah Knoop trascorre sei anni fingendo di essere uno scrittore transgender di nome JT Leroy, la persona letteraria inventata di sua cognata.","genres":["Drama"],"poster":"https://image.tmdb.org/t/p/w500/43ffZhMCWQhzMneGP4kDWoPV48X.jpg","release_date":1556236800},
{"id":460071,"title":"Lizzie","overview":"Massachusetts, 1892. Una donna non sposata di 32 anni e un emarginato sociale, Lizzie vive una vita claustrofobica sotto il freddo e dominante controllo di suo padre. Quando Bridget Sullivan, una giovane cameriera, viene a lavorare per la famiglia, Lizzie trova uno spirito affine e gentile, e una segreta intimità sboccia presto in un piano malvagio.","genres":["Crime","Drama","Thriller"],"poster":"https://image.tmdb.org/t/p/w500/z2iuBcwznen3kC9z4LeOzBSz1BB.jpg","release_date":1536883200}
]Come puoi vedere, ogni singolo elemento contiene un id, un titolo, un link all’immagine del poster, una panoramica del film, una data di rilascio e un elenco di generi. La data di rilascio è nel formato EPOCH.
Carichiamo i dati in Meilisearch utilizzando curl tramite una richiesta HTTP POST.
$ curl \
-X POST 'http://localhost:7700/indexes/movies/documents' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' \
--data-binary @movies.jsonEsaminiamo gli argomenti del comando:
- -X POST - specifica che stiamo eseguendo una richiesta HTTP POST e inviando dati.
- -H Content-Type - specifica il tipo di contenuto del file.
- -H Authorization: Bearer - serve a passare la chiave master con le tue richieste.
- –data-binary - specifica il file da includere.
Qui stiamo creando un nuovo indice Meilisearch nella posizione /indexes/movies/documents. Dovresti ricevere un output simile che ti dice che la richiesta è stata messa in coda. Meilisearch elabora tutte le richieste in modo asincrono.
{"taskUid":0,"indexUid":"movies","status":"enqueued","type":"documentAdditionOrUpdate","enqueuedAt":"2024-05-03T03:12:55.599798591Z"}Puoi anche eseguire il comando sopra sostituendo l’URL http://localhost:7700 con https://meilisearch.example.com e funzionerà allo stesso modo. Puoi farlo per tutti i comandi in questo tutorial, ma per semplicità rimarremo all’URL http://localhost:7700.
Esegui il seguente comando per controllare lo stato della richiesta.
$ curl -X GET 'http://localhost:7700/indexes/movies/tasks/0'Dovresti ricevere un output simile.
{"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"}Questo ci dice che il compito è stato completato e il database dei film è ora completamente indicizzato e pronto per l’uso.
Passo 11 - Utilizzare chiavi limitate per la ricerca
C’è uno strumento di cui abbiamo bisogno che aiuta con la formattazione JSON leggibile da riga di comando. Si chiama jq. Esegui il seguente comando per installarlo.
$ sudo apt install -y jqAnche se abbiamo aggiunto la chiave master al file di configurazione, dovrai passarla di nuovo con ogni richiesta. Prima di procedere, abbiamo bisogno di una chiave più ristretta che abiliti la modalità di sola lettura. Meiliserch crea una chiave di sola lettura predefinita per impostazione predefinita. Prendiamola.
$ curl -X GET 'http://localhost:7700/keys' -H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' | jqDovresti vedere un output simile.
{
"results": [
{
"name": "Default Search API Key",
"description": "Usala per cercare dal 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": "Default Admin API Key",
"description": "Usala per qualsiasi cosa che non sia un'operazione di ricerca. Attenzione! Non esporlo su un frontend pubblico",
"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
}D’ora in poi, utilizzeremo la Default Search API key per eseguire ricerche.
Passo 12 - Ricerca nei dati di esempio
Ci sono due modi per cercare utilizzando Meilisearch, puoi utilizzare l’API tramite la riga di comando o utilizzare l’interfaccia web. L’interfaccia web è piuttosto limitata e funziona solo se utilizzi Meilisearch in un ambiente di sviluppo, e l’API è il modo raccomandato per utilizzare Meilisearch. Poiché abbiamo configurato la nostra ricerca per la produzione, utilizzeremo solo il metodo della riga di comando.
Cercare tramite l’API è come caricare dati tramite richiesta HTTP POST. Fai una richiesta all’endpoint /search dell’API. Ad esempio, cerchiamo eventuali film con la parola saint in esso.
$ curl \
-X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
--data-binary '{ "q": "saint" }' | jqDovresti ricevere un output formattato in JSON simile al seguente.
{
"hits": [
{
"id": 25248,
"title": "Saint Ralph",
"overview": "Questa commedia/dramma canadese, ambientata a Hamilton, Ontario nel 1954, è una dolce e - a volte - goffa storia che diventa sempre più toccante man mano che i minuti passano. È la storia fittizia di un ragazzo di 9 anni, Ralph (Adam Butcher), che vive segretamente da solo mentre sua madre vedova e ospedalizzata rimane immersa in un coma. Spesso nei guai con Padre Fitzpatrick (Gordon Pinsent), il preside della sua scuola cattolica maschile, Ralph è considerato una sorta di barzelletta tra i coetanei fino a quando non decide di compiere un miracolo che potrebbe salvare sua madre, ovvero vincere la Maratona di Boston. Allenato da un giovane prete e ex corridore, Padre Hibbert (Campbell Scott), il cui cinismo è stato sollevato dalla pura speranza del ragazzo, Ralph si applica alla sua improbabile missione, respingendo i detrattori e ricevendo aiuto lungo un percorso molto impegnativo da vari alleati e amici.",
"genres": [
"Comedy",
"Drama"
],
"poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
"release_date": 1123200000
},
{
"id": 26894,
"title": "Saint Sinner",
"overview": "Nel 1815 un monaco, Tomas Alcala, inavvertitamente scatenò due succubi femminili, Munkar e Nakir, su un 21° secolo ignaro. È scelto da Dio per viaggiare attraverso i secoli e fermare la furia dei demoni.",
"genres": [
"Fantasy",
"Horror",
"Science Fiction",
"TV Movie"
],
"poster": "https://image.tmdb.org/t/p/w500/cxljKsfUI6PVFPIgPvsesUWHai4.jpg",
"release_date": 1035590400
},
{
"id": 27023,
"title": "Saint John of Las Vegas",
"overview": "Un ex giocatore d'azzardo viene attirato di nuovo nel gioco da un investigatore di frodi assicurative veterano.",
"genres": [
"Comedy"
],
"poster": "https://image.tmdb.org/t/p/w500/kN4Vur1SccouDR0k3tmJXJHdrXw.jpg",
"release_date": 1264723200
},
...Per testare la funzionalità di fuzzy matching di Meilisearch in cui parole simili possono essere utilizzate per trovare la ricerca esatta. Questo è utile nel caso tu faccia un errore di battitura e ti aspetti comunque il risultato corretto.
$ curl \
-X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
--data-binary '{ "q": "seint" }' | jqQui, abbiamo scritto male saint come seint e Meilisearch restituirà comunque voci con la parola saint.
{
"hits": [
{
"id": 10105,
"title": "Saints and Soldiers",
"overview": "Cinque soldati americani che combattono in Europa durante la Seconda Guerra Mondiale lottano per tornare nel territorio alleato dopo essere stati separati dalle forze statunitensi durante il storico Massacro di Malmedy.",
"genres": [
"War",
"Drama",
"Action",
"Adventure",
"History"
],
"poster": "https://image.tmdb.org/t/p/w500/efhqxap8fLi4v1GEXVvakey0z3S.jpg",
"release_date": 1063238400
},
{
"id": 25248,
"title": "Saint Ralph",
"overview": "Questa commedia/dramma canadese, ambientata a Hamilton, Ontario nel 1954, è una dolce e - a volte - goffa storia che diventa sempre più toccante man mano che i minuti passano. È la storia fittizia di un ragazzo di 9 anni, Ralph (Adam Butcher), che vive segretamente da solo mentre sua madre vedova e ospedalizzata rimane immersa in un coma. Spesso nei guai con Padre Fitzpatrick (Gordon Pinsent), il preside della sua scuola cattolica maschile, Ralph è considerato una sorta di barzelletta tra i coetanei fino a quando non decide di compiere un miracolo che potrebbe salvare sua madre, ovvero vincere la Maratona di Boston. Allenato da un giovane prete e ex corridore, Padre Hibbert (Campbell Scott), il cui cinismo è stato sollevato dalla pura speranza del ragazzo, Ralph si applica alla sua improbabile missione, respingendo i detrattori e ricevendo aiuto lungo un percorso molto impegnativo da vari alleati e amici.",
"genres": [
"Comedy",
"Drama"
],
"poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
"release_date": 1123200000
},
{
"id": 26894,
"title": "Saint Sinner",
"overview": "Nel 1815 un monaco, Tomas Alcala, inavvertitamente scatenò due succubi femminili, Munkar e Nakir, su un 21° secolo ignaro. È scelto da Dio per viaggiare attraverso i secoli e fermare la furia dei demoni.",
"genres": [
"Fantasy",
"Horror",
"Science Fiction",
"TV Movie"
],
"poster": "https://image.tmdb.org/t/p/w500/cxljKsfUI6PVFPIgPvsesUWHai4.jpg",
"release_date": 1035590400
},
…Passo 13 - Ottimizzazione del ranking della ricerca e filtraggio dei dati
I motori di ricerca possono restituire risultati migliori se sanno come classificare o dare importanza a determinati risultati in base all’importanza di un particolare campo. Meilisearch ha un insieme predefinito di regole di bias che puoi configurare per migliorare i tuoi risultati di ricerca.
Ma prima, dobbiamo controllare le regole di ranking impostate da Meilisearch.
$ curl -X GET 'http://localhost:7700/indexes/movies/settings/ranking-rules' -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196'Riceverai il seguente output.
["words","typo","proximity","attribute","sort","exactness"]- words - i risultati sono ordinati in base al numero decrescente di termini corrispondenti.
- typo - i risultati sono ordinati in base al numero crescente di errori di battitura. Meno query di errore di battitura vengono restituite in cima.
- proximity - i risultati sono ordinati in base alla distanza crescente tra i termini corrispondenti.
- attribute - i risultati sono ordinati in base all’ordine di ranking degli attributi.
- sort - i risultati sono ordinati in base ai parametri decisi al momento della query.
- exactness - i risultati sono ordinati in base alla somiglianza delle parole corrispondenti con le parole della query.
Puoi leggere di più sulla rilevanza nella documentazione ufficiale di Meilisearch.
Esegui il seguente comando per cambiare l’ordine delle regole di bias.
$ 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"
]'Ora filtriamo i risultati della ricerca. Prima, chiediamo a Meilisearch di utilizzare solo determinati attributi per eseguire la ricerca e lasciare da parte gli attributi privi di significato come 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"
]
}'Qui, stiamo eseguendo una ricerca utilizzando solo gli attributi title, overview e genres che daranno risultati migliori.
Successivamente, possiamo formattare i nostri risultati di ricerca per visualizzare solo determinati attributi mentre nascondiamo gli altri.
$ 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"
]'Questo mostrerà solo gli attributi che abbiamo incluso nella nostra query con i risultati.
Infine, puoi anche fornire un elenco di attributi da filtrare o ordinare. Questo include sia il filtraggio quantitativo utilizzando operatori matematici come < o > e il filtraggio attraverso l’inclusione in un insieme specificato. Questo è anche chiamato ricerca facettata.
$ 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"
]
}'Possiamo combinare tutte queste regole per eseguire una query come la seguente.
$ 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" }' | jqQui stiamo cercando tutti i film nel genere Horror dal più recente al più vecchio contenente la parola house nel titolo. Dovresti ricevere un output simile.
{
"hits": [
{
"id": 440559,
"title": "Housesitters",
"overview": "Angie e Izzy ottengono un lavoro di housesitting che sembra troppo bello per essere vero. Gruesome supernatural hijinks ensue.",
"genres": [
"Comedy",
"Horror"
],
"poster": "https://image.tmdb.org/t/p/w500/9Gnu0PBdYzyd7ZkO74XK0xCH0iY.jpg",
"release_date": 1524873600
},
{
"id": 449550,
"title": "Housewife",
"overview": "Housewife è incentrato su Holly la cui madre ha ucciso sua sorella e suo padre quando aveva sette anni. 20 anni dopo e lentamente perdendo la presa sulla differenza tra realtà e incubi, incontra un sensitivo famoso che afferma di essere destinato ad aiutarla.",
"genres": [
"Horror"
],
"poster": "https://image.tmdb.org/t/p/w500/ohHxS7PIRQb9O6KTrDtqYshYGts.jpg",
"release_date": 1504828800
},
{
"id": 392703,
"title": "House of Darkness",
"overview": "Ispirato a eventi veri, il thriller soprannaturale 'House of Darkness' racconta il misterioso caso di una famiglia di San Francisco che ha affermato che una forza oscura era responsabile degli eventi tragici che si sono svolti. Cercando di salvare il loro matrimonio in difficoltà Kelly (Sara Fletcher, 'Adulthood'), suo marito Brian (Gunner Wright, 'J. Edgar') e la loro figlia Sarah (Mykayla Sohn, 'The Chosen') si trasferiscono in una fattoria rurale in cerca di serenità. Senza saperlo, quasi ogni famiglia che ha vissuto nella casa ha subito qualche forma di tragedia, risalente a quasi 100 anni. Poco dopo il loro arrivo, Kelly inizia a percepire che il comportamento di suo marito sta diventando sempre più strano e violento. Kelly scopre anche che le voci che sente echeggiare nei corridoi non provengono da sua figlia. Saranno Kelly e la sua famiglia le prossime vittime delle forze oscure nella casa?",
"genres": [
"Horror",
"Thriller",
"TV Movie"
],
"poster": "https://image.tmdb.org/t/p/w500/ueQM9RsT0HLL2RuuiLmD07j8lKB.jpg",
"release_date": 1460851200
},
…Passo 14 - Conclusione
Hai finito di installare e configurare Meilisearch in un ambiente di produzione su un server Debian 12. Hai anche eseguito alcune ricerche di base e imparato come migliorare i risultati di ricerca attraverso il ranking e il filtraggio. Se hai domande, postale nei commenti qui sotto.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.