Meilisearch Anleitung · 21 min read · Oct 26, 2025

So installieren und konfigurieren Sie Meilisearch auf Debian 12

Meilisearch ist eine Open-Source-Suchmaschine, die in der Programmiersprache Rust geschrieben ist. Die Verwendung von Rust erfordert weniger Ressourcen zum Ausführen und kann mit einem einzigen Befehlszeilen-Binary ausgeführt werden. Der Installationsprozess ist einfacher als bei alternativen Suchmaschinen und erfordert weniger Schritte. Zu den Funktionen gehören unscharfe Übereinstimmungen und schemafreies Indizieren. Es wird mit einem Web-Frontend zu Demozwecken geliefert. Es kann in verschiedene Webanwendungen über verschiedene in mehreren Sprachen wie JavaScript, Python, PHP, Ruby usw. verfügbare Bibliotheken integriert werden.

In diesem Tutorial lernen Sie, wie Sie Meilisearch in der Produktion auf einem Debian 12-Server installieren und verwenden, um mehrere einfache Suchen durchzuführen.

Voraussetzungen

  • Ein Server, der Debian 12 mit mindestens 2 GB RAM ausführt.

  • Ein Nicht-Root-Benutzer mit Sudo-Rechten.

  • Die unkomplizierte Firewall (UFW) ist aktiviert und läuft.

  • Ein vollständig qualifizierter Domainname (FQDN) wie meilisearch.example.com, der auf Ihren Server zeigt. Dies ist vorteilhaft, wenn Sie Meilisearch über SSL mit einem Proxy-Server bereitstellen möchten.

  • Alles ist aktualisiert. $ sudo apt update && sudo apt upgrade

  • Einige grundlegende Pakete sind für das Tutorial erforderlich. Einige davon sind möglicherweise bereits auf Ihrem Server installiert. $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y

Schritt 1 - Firewall konfigurieren

Der erste Schritt vor der Installation von Paketen besteht darin, die Firewall so zu konfigurieren, dass HTTP- und HTTPS-Verbindungen zugelassen werden.

Überprüfen Sie den Status der Firewall.

$ sudo ufw status

Sie sollten etwas sehen, das wie folgt aussieht.

Status: aktiv

Zu                         Aktion      Von
--                         ------      ----
OpenSSH                    ERLAUBEN    Überall
OpenSSH (v6)               ERLAUBEN    Überall (v6)

Erlauben Sie HTTP- und HTTPS-Ports.

$ sudo ufw allow http
$ sudo ufw allow https

Überprüfen Sie den Status erneut zur Bestätigung.

$ sudo ufw status
Status: aktiv

Zu                         Aktion      Von
--                         ------      ----
OpenSSH                    ERLAUBEN    Überall
80/tcp                     ERLAUBEN    Überall
443/tcp                    ERLAUBEN    Überall
OpenSSH (v6)               ERLAUBEN    Überall (v6)
80/tcp (v6)                ERLAUBEN    Überall (v6)
443/tcp (v6)               ERLAUBEN    Überall (v6)

Schritt 2 - Meilisearch installieren

Es gibt mehrere Möglichkeiten, Meilisearch zu installieren. Wir werden die einfachste Methode verwenden, die darin besteht, die Binärdatei auf unseren Server zu kopieren.

Installieren Sie Meilisearch.

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

Machen Sie die Binärdatei ausführbar.

$ chmod +x meilisearch

Im Moment ist die Binärdatei nur aus dem Verzeichnis, in dem Sie sie heruntergeladen haben, verwendbar. Um sie von überall verwenden zu können, verschieben Sie die Binärdatei in das Verzeichnis /usr/local/bin.

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

Bestätigen Sie, dass Meilisearch installiert und ordnungsgemäß ausgeführt wird.

$ meilisearch --version
meilisearch 1.7.6

Schritt 3 - Erstellen Sie einen Systembenutzer für Meilisearch

Meilisearch als Root auszuführen, kann Sicherheitsprobleme verursachen. Um dies zu vermeiden, erstellen Sie einen Systembenutzer zum Ausführen von Meilisearch.

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

Schritt 4 - Meilisearch konfigurieren

Bevor wir fortfahren, müssen wir einen Master-Schlüssel erstellen, den Meilisearch für den Authentifizierungsprozess verwendet. Sie können das OpenSSL-Befehlszeilenprogramm verwenden, um ihn zu erstellen. Führen Sie den folgenden Befehl aus, um einen 30 Zeichen langen Master-Schlüssel zu erstellen. Sie können jede Länge für Ihren Master-Schlüssel wählen. Je länger, desto besser.

$ openssl rand -hex 30

Sie sollten eine ähnliche Ausgabe mit einem 30 Zeichen langen Schlüssel erhalten. Kopieren Sie diesen Wert, da wir ihn in den kommenden Schritten benötigen.

65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611

Holen Sie sich die neueste Konfigurationsdatei aus dem Meilisearch-GitHub-Repository und kopieren Sie sie in das Verzeichnis /etc.

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

Öffnen Sie sie zur Bearbeitung.

$ sudo nano /etc/meilisearch.toml

Aktualisieren Sie die folgenden Zeilen in der Datei, um den Datenbankpfad, den Dump-Pfad, das Snapshot-Verzeichnis und die Arbeitsumgebung zu konfigurieren und fügen Sie den zuvor generierten Master-Schlüssel zur Authentifizierung hinzu.

Die aktualisierten Werte in der Konfigurationsdatei sollten wie folgt aussehen.

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

Meilisearch sammelt regelmäßig anonymisierte Daten. Sie sollten dies mit der folgenden Option deaktivieren. Kommentieren Sie es aus, um die Telemetrie von Meilisearch zu deaktivieren.

no_analytics = true

Standardmäßig verwendet Meilisearch nicht mehr als zwei Drittel des verfügbaren RAMs auf Ihrem System. Sie können dies steuern, indem Sie die folgende Variable auskommentieren und festlegen. Sie können den Wert auch als genaue Anzahl von Bytes angeben, um präzise und genau zu sein.

max_indexing_memory = "1 GiB"

Meilisearch verwendet nicht mehr als die Hälfte der verfügbaren CPU-Kerne. Sie können diesen Wert jedoch steuern, indem Sie die folgende Variable auskommentieren und festlegen.

max_indexing_threads = 1

Wenn Sie diesen Wert höher als die Anzahl der CPU-Kerne der Maschine einstellen, wird Meilisearch angewiesen, die maximale Anzahl verfügbarer Kerne zu verwenden.

Eine weitere Einstellung, die Sie kennen sollten, ist die maximale Payload, die Meilisearch verarbeiten kann. Der Standardwert ist auf 100 MB festgelegt. Sie können ihn ändern, indem Sie die folgende Variable konfigurieren.

http_payload_size_limit = "100 MB"

Sobald Sie fertig sind, speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Schritt 5 - Verzeichnisse erstellen und Berechtigungen erteilen

Erstellen Sie die Verzeichnisse, in denen Meilisearch seine Datenbank, Datenbank-Dumps und Snapshots speichern wird.

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

Setzen Sie den Eigentümer und die Gruppe für diese Verzeichnisse auf den Systembenutzer, den wir für Meilisearch erstellt haben.

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

Setzen Sie den Eigentümer und die Gruppe für die Meilisearch-Binärdatei.

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

Setzen Sie die richtigen Berechtigungen für das Verzeichnis.

$ sudo chmod 750 /var/lib/meilisearch

Schritt 6 - Meilisearch als Dienst ausführen

Um Meilisearch jederzeit für Suchanfragen verfügbar zu machen, ist es besser, es als Systemdienst auszuführen. Dazu müssen wir eine Dienstdatei dafür erstellen.

Erstellen und öffnen Sie /etc/systemd/system/meilisearch.service zur Bearbeitung.

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

Fügen Sie den folgenden Code ein.

[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

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Aktivieren Sie den Dienst.

$ sudo systemctl enable meilisearch

Starten Sie den Meilisearch-Dienst.

$ sudo systemctl start meilisearch 

Überprüfen Sie den Dienststatus

$ sudo systemctl status meilisearch

Sie sollten eine ähnliche Ausgabe erhalten.

? 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 runtime

Meilisearch ist installiert und läuft. Lassen Sie uns den Dienst nach außen hin verfügbar machen, indem wir den Nginx-Server als Reverse-Proxy verwenden und Let’s Encrypt verwenden, um ihn über SSL bereitzustellen.

Schritt 7 - Nginx installieren

Debian 12 wird mit einer älteren Version von Nginx ausgeliefert. Sie müssen das offizielle Nginx-Repository herunterladen, um die neueste Version zu installieren.

Importieren Sie den Signaturschlüssel von Nginx.

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

Fügen Sie das Repository für die Hauptversion von Nginx hinzu.

$ 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

Aktualisieren Sie die System-Repositorys.

$ sudo apt update

Installieren Sie Nginx.

$ sudo apt install nginx

Überprüfen Sie die Installation. Auf Debian-Systemen funktioniert der folgende Befehl nur mit sudo.

$ sudo nginx -v
nginx version: nginx/1.25.5

Starten Sie den Nginx-Server.

$ sudo systemctl start nginx

Überprüfen Sie den Dienststatus.

$ sudo systemctl status nginx
? nginx.service - nginx - Hochleistungs-Webserver
     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 - Hochleistungs-Webserver...
May 03 03:04:02 meilisearch systemd[1]: Started nginx.service - nginx - Hochleistungs-Webserver.

Schritt 8 - SSL installieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu generieren. Sie können Certbot entweder über das Debian-Repository installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Debian 12 wird nicht mit Snapd ausgeliefert. Installieren Sie das Snapd-Paket.

$ sudo apt install -y snapd

Führen Sie die folgenden Befehle aus, um sicherzustellen, dass Ihre Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core && sudo snap refresh core

Installieren Sie Certbot.

$ sudo snap install --classic certbot

Verwenden Sie den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem Sie einen symbolischen Link zum Verzeichnis /usr/bin erstellen.

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

Überprüfen Sie, ob Certbot ordnungsgemäß funktioniert.

$ certbot --version
certbot 2.10.0

Führen Sie den folgenden Befehl aus, um ein SSL-Zertifikat zu generieren.

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

Der obige Befehl lädt ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/meilisearch.example.com auf Ihrem Server herunter.

Generieren Sie ein Diffie-Hellman-Gruppen-Zertifikat.

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

Überprüfen Sie die Liste der systemd-Timer. Certbot installiert und startet automatisch einen Timer für Erneuerungszwecke.

$ sudo systemctl list-timers

Sie finden snap.certbot.renew.service als einen der Dienste, die geplant sind.

NÄCHSTER                     ÜBRIG           LETZTER                      VERGANGEN    EINHEIT                        AKTIVIERT                   ---------------------------------------------------------------------------------------------------------------------------------------  
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.service

Führen Sie einen Testlauf des Prozesses durch, um zu überprüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn Sie keine Fehler sehen, sind Sie bereit. Ihr Zertifikat wird automatisch erneuert.

Schritt 9 - Nginx konfigurieren

Öffnen Sie die Datei /etc/nginx/nginx.conf zur Bearbeitung.

$ sudo nano /etc/nginx/nginx.conf

Fügen Sie die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; hinzu.

server_names_hash_bucket_size 64;

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Erstellen und öffnen Sie die Datei /etc/nginx/conf.d/meilisearch.conf zur Bearbeitung.

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

Fügen Sie den folgenden Code ein. Ersetzen Sie meilisearch.example.com durch Ihren Domainnamen.

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;
    }
}
# HTTPS erzwingen
server {
    listen 80;
    listen [::]:80;
    server_name  meilisearch.example.com;
    return 301   https://$host$request_uri;
}

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Überprüfen Sie Ihre Nginx-Konfiguration.

$ sudo nginx -t

Starten Sie den Nginx-Server neu.

$ sudo systemctl restart nginx

Meilisearch läuft jetzt und ist über die URL https://meilisearch.example.com verfügbar. Sie sollten den folgenden Text sehen, wenn Sie die URL öffnen.

{"status":"Meilisearch läuft"}

Diese URL kann nur für die Suche über die Befehlszeile verwendet werden. Wenn Sie auf Meilisearch über ein Frontend zugreifen möchten, müssen Sie es mit einem anderen CMS oder einer Software integrieren, um es zum Laufen zu bringen, was außerhalb dieses Tutorials liegt. Meilisearch wird mit einer integrierten Frontend-Oberfläche geliefert, die jedoch nur funktioniert, wenn Sie es zu Entwicklungszwecken verwenden. Sie können die Umgebung der Instanz in der Konfigurationsdatei auf development ändern und Meilisearch neu starten, um die Schnittstelle zu aktivieren. Es sollte etwa so aussehen.

Meilisearch Entwicklungs-Such-Dashboard

Für eine Produktionsumgebung müssen Sie Meilisearch mit einem anderen CMS integrieren.

Lassen Sie uns damit beginnen, einige Dokumente zu indizieren und es für die Suche zu verwenden.

Schritt 10 - Beispiel-Daten in Meilisearch laden

Das Meilisearch-Projekt stellt eine Beispiel-JSON-formatierte Filmdatei mit Daten zur Verfügung, die von der Movie Database (TMDB) gesammelt wurden. Laden Sie die Datei herunter.

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

Sie können den Befehl tail ausführen, um einen Teil der Daten zu sehen. Es sollte etwa so aussehen.

$ tail -n 3 movies.json

{"id":460070,"title":"J.T. LeRoy","overview":"Eine junge Frau namens Savannah Knoop verbringt sechs Jahre damit, sich als transgender Schriftstellerin namens JT Leroy auszugeben, die erfundene literarische Persona ihrer Schwiegertochter.","genres":["Drama"],"poster":"https://image.tmdb.org/t/p/w500/43ffZhMCWQhzMneGP4kDWoPV48X.jpg","release_date":1556236800},
{"id":460071,"title":"Lizzie","overview":"Massachusetts, 1892. Eine unverheiratete Frau von 32 Jahren und ein sozialer Außenseiter, Lizzie lebt ein klaustrophobisches Leben unter der kalten und dominierenden Kontrolle ihres Vaters. Als Bridget Sullivan, eine junge Dienstmagd, für die Familie zu arbeiten beginnt, findet Lizzie einen sympathischen, verwandten Geist, und eine geheime Intimität blüht bald zu einem bösen Plan auf.","genres":["Crime","Drama","Thriller"],"poster":"https://image.tmdb.org/t/p/w500/z2iuBcwznen3kC9z4LeOzBSz1BB.jpg","release_date":1536883200}
]

Wie Sie sehen können, enthält jeder einzelne Eintrag eine ID, einen Titel, einen Link zum Posterbild, eine Übersicht über den Film, ein Veröffentlichungsdatum und eine Liste von Genres. Das Veröffentlichungsdatum liegt im EPOCH-Format.

Lassen Sie uns die Daten in Meilisearch mithilfe von curl über eine HTTP-POST-Anfrage laden.

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

Lassen Sie uns die Befehlsargumente durchgehen:

  • -X POST - gibt an, dass wir eine HTTP-POST-Anfrage durchführen und Daten senden.
  • -H Content-Type - gibt den Inhaltstyp der Datei an.
  • -H Authorization: Bearer - wird verwendet, um den Master-Schlüssel mit Ihren Anfragen zu übergeben.
  • –data-binary - gibt die einzuschließende Datei an.

Hier erstellen wir einen neuen Meilisearch-Index am Speicherort /indexes/movies/documents. Sie sollten eine ähnliche Ausgabe erhalten, die Ihnen mitteilt, dass die Anfrage in die Warteschlange gestellt wurde. Meilisearch verarbeitet alle Anfragen asynchron.

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

Sie können den obigen Befehl auch ausführen, indem Sie die URL http://localhost:7700 durch https://meilisearch.example.com ersetzen, und es wird auf die gleiche Weise funktionieren. Sie können dies für alle Befehle in diesem Tutorial tun, aber der Einfachheit halber bleiben wir bei der URL http://localhost:7700.

Führen Sie den folgenden Befehl aus, um den Status der Anfrage zu überprüfen.

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

Sie sollten eine ähnliche Ausgabe erhalten.

{"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"}

Dies sagt uns, dass die Aufgabe abgeschlossen ist und die Filmdatenbank jetzt vollständig indiziert und bereit zur Verwendung ist.

Schritt 11 - Verwenden Sie eingeschränkte Schlüssel für die Suche

Es gibt ein Tool, das uns bei der lesbaren Befehlszeilen-JSON-Formatierung hilft. Es heißt jq. Führen Sie den folgenden Befehl aus, um es zu installieren.

$ sudo apt install -y jq

Obwohl wir den Master-Schlüssel in der Konfigurationsdatei hinzugefügt haben, müssen Sie ihn bei jeder Anfrage erneut übergeben. Bevor wir fortfahren, benötigen wir einen eingeschränkteren Schlüssel, der den Nur-Lese-Modus aktiviert. Meilisearch erstellt standardmäßig einen Nur-Lese-Schlüssel. Lassen Sie uns ihn abrufen.

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

Sie sollten eine ähnliche Ausgabe sehen.

{
  "results": [
    {
      "name": "Standard-Such-API-Schlüssel",
      "description": "Verwenden Sie ihn, um von der Frontend-Schnittstelle zu suchen",
      "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": "Standard-Admin-API-Schlüssel",
      "description": "Verwenden Sie ihn für alles, was keine Suchoperation ist. Vorsicht! Nicht auf einer öffentlichen Frontend-Schnittstelle offenlegen",
      "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
}

Von nun an werden wir den Standard-Such-API-Schlüssel verwenden, um Suchen durchzuführen.

Schritt 12 - Durch Beispiel-Daten suchen

Es gibt zwei Möglichkeiten, mit Meilisearch zu suchen: Sie können entweder die API über die Befehlszeile verwenden oder die Webschnittstelle nutzen. Die Webschnittstelle ist ziemlich eingeschränkt und funktioniert nur, wenn Sie Meilisearch in einer Entwicklungsumgebung verwenden, und die API ist die empfohlene Methode zur Verwendung von Meilisearch. Da wir unsere Suche für die Produktion konfiguriert haben, werden wir nur die Befehlszeilenmethode verwenden.

Die Suche über die API ist wie das Hochladen von Daten über eine HTTP-POST-Anfrage. Sie stellen eine Anfrage an den Endpunkt /search der API. Zum Beispiel lassen Sie uns nach Filmen suchen, die das Wort saint enthalten.

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

Sie sollten eine Ausgabe im JSON-Format wie die folgende erhalten.

{
  "hits": [
    {
      "id": 25248,
      "title": "Saint Ralph",
      "overview": "Diese kanadische Komödie/Drama, die 1954 in Hamilton, Ontario spielt, ist eine süße und - manchmal - alberne Geschichte, die mit der Zeit immer bewegender wird. Es ist die fiktive Geschichte eines orientierungslosen Neuntklässlers, Ralph (Adam Butcher), der heimlich allein lebt, während seine verwitwete, hospitalisierte Mutter im Koma liegt. Häufig in Schwierigkeiten mit Father Fitzpatrick (Gordon Pinsent), dem Direktor seiner Jungen-Catholic-Schule, wird Ralph von seinen Altersgenossen als Witz betrachtet, bis er beschließt, ein Wunder zu vollbringen, das seine Mutter retten könnte, d.h. den Boston-Marathon zu gewinnen. Unter der Anleitung eines jüngeren Priesters und ehemaligen Läufers, Father Hibbert (Campbell Scott), dessen Zynismus durch die reine Hoffnung des Jungen gelockert wurde, widmet sich Ralph seiner unwahrscheinlichen Mission, indem er Kritiker abwehrt und auf einem sehr herausfordernden Weg Hilfe von verschiedenen Verbündeten und Freunden erhält.",
      "genres": [
        "Komödie",
        "Drama"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
      "release_date": 1123200000
    },
    {
      "id": 26894,
      "title": "Saint Sinner",
      "overview": "Im Jahr 1815 entfesselt ein Mönch, Tomas Alcala, unwissentlich zwei weibliche Succubi, Munkar und Nakir, in einem ahnungslosen 21. Jahrhundert. Er wird von Gott ausgewählt, durch die Jahrhunderte zu reisen und die Rampage der Dämonen zu stoppen.",
      "genres": [
        "Fantasy",
        "Horror",
        "Science Fiction",
        "TV-Film"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/cxljKsfUI6PVFPIgPvsesUWHai4.jpg",
      "release_date": 1035590400
    },
    {
      "id": 27023,
      "title": "Saint John of Las Vegas",
      "overview": "Ein Ex-Spieler wird von einem erfahrenen Versicherungsbetrugs-Ermittler zurück ins Spiel gelockt.",
      "genres": [
        "Komödie"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/kN4Vur1SccouDR0k3tmJXJHdrXw.jpg",
      "release_date": 1264723200
    },
  ...

Um die unscharfe Übereinstimmungsfunktion von Meilisearch zu testen, bei der ähnlich klingende Wörter verwendet werden können, um die genaue Suche zu finden. Dies ist hilfreich, falls Sie einen Tippfehler machen und dennoch das richtige Ergebnis erwarten.

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

Hier haben wir saint als seint falsch geschrieben, und Meilisearch wird dennoch Einträge mit dem Wort saint zurückgeben.

{
  "hits": [
    {
      "id": 10105,
      "title": "Saints and Soldiers",
      "overview": "Fünf amerikanische Soldaten, die in Europa während des Zweiten Weltkriegs kämpfen, kämpfen darum, in das alliierte Gebiet zurückzukehren, nachdem sie von den US-Truppen während des historischen Malmedy-Massakers getrennt wurden.",
      "genres": [
        "Krieg",
        "Drama",
        "Aktion",
        "Abenteuer",
        "Geschichte"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/efhqxap8fLi4v1GEXVvakey0z3S.jpg",
      "release_date": 1063238400
    },
    {
      "id": 25248,
      "title": "Saint Ralph",
      "overview": "Diese kanadische Komödie/Drama, die 1954 in Hamilton, Ontario spielt, ist eine süße und - manchmal - alberne Geschichte, die mit der Zeit immer bewegender wird. Es ist die fiktive Geschichte eines orientierungslosen Neuntklässlers, Ralph (Adam Butcher), der heimlich allein lebt, während seine verwitwete, hospitalisierte Mutter im Koma liegt. Häufig in Schwierigkeiten mit Father Fitzpatrick (Gordon Pinsent), dem Direktor seiner Jungen-Catholic-Schule, wird Ralph von seinen Altersgenossen als Witz betrachtet, bis er beschließt, ein Wunder zu vollbringen, das seine Mutter retten könnte, d.h. den Boston-Marathon zu gewinnen. Unter der Anleitung eines jüngeren Priesters und ehemaligen Läufers, Father Hibbert (Campbell Scott), dessen Zynismus durch die reine Hoffnung des Jungen gelockert wurde, widmet sich Ralph seiner unwahrscheinlichen Mission, indem er Kritiker abwehrt und auf einem sehr herausfordernden Weg Hilfe von verschiedenen Verbündeten und Freunden erhält.",
      "genres": [
        "Komödie",
        "Drama"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
      "release_date": 1123200000
    },
    {
      "id": 26894,
      "title": "Saint Sinner",
      "overview": "Im Jahr 1815 entfesselt ein Mönch, Tomas Alcala, unwissentlich zwei weibliche Succubi, Munkar und Nakir, in einem ahnungslosen 21. Jahrhundert. Er wird von Gott ausgewählt, durch die Jahrhunderte zu reisen und die Rampage der Dämonen zu stoppen.",
      "genres": [
        "Fantasy",
        "Horror",
        "Science Fiction",
        "TV-Film"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/cxljKsfUI6PVFPIgPvsesUWHai4.jpg",
      "release_date": 1035590400
    },
 …

Schritt 13 - Suchranking anpassen und Daten filtern

Suchmaschinen können bessere Ergebnisse zurückgeben, wenn sie wissen, wie sie bestimmte Ergebnisse basierend auf der Wichtigkeit eines bestimmten Feldes bewerten oder gewichten sollen. Meilisearch hat einen Standard-Satz von Bias-Regeln, die Sie konfigurieren können, um Ihre Suchergebnisse zu verbessern.

Aber zuerst müssen wir die von Meilisearch festgelegten Ranking-Regeln überprüfen.

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

Sie erhalten die folgende Ausgabe.

["words","typo","proximity","attribute","sort","exactness"]
  1. words - Ergebnisse werden nach abnehmender Anzahl übereinstimmender Begriffe sortiert.
  2. typo - Ergebnisse werden nach zunehmender Anzahl von Tippfehlern sortiert. Weniger Tippfehleranfragen werden oben zurückgegeben.
  3. proximity - Ergebnisse werden nach zunehmendem Abstand zwischen übereinstimmenden Begriffen sortiert.
  4. attribute - Ergebnisse werden nach der Rangfolge der Attribute sortiert.
  5. sort - Ergebnisse werden gemäß den zum Abfragezeitpunkt festgelegten Parametern sortiert.
  6. exactness - Ergebnisse werden nach der Ähnlichkeit der übereinstimmenden Wörter mit den Abfragewörtern sortiert.

Sie können mehr über Relevanz in der offiziellen Meilisearch-Dokumentation lesen.

Führen Sie den folgenden Befehl aus, um die Reihenfolge der Bias-Regeln zu ändern.

$ 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"
  ]'

Jetzt lassen Sie uns die Suchergebnisse filtern. Zuerst lassen Sie uns Meilisearch anweisen, nur bestimmte Attribute zur Durchführung der Suche zu verwenden und bedeutungslose Attribute wie id beiseite zu lassen.

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

Hier führen wir eine Suche nur unter Verwendung der Attribute title, overview und genres durch, die bessere Ergebnisse liefern werden.

Als nächstes können wir unsere Suchergebnisse so formatieren, dass nur bestimmte Attribute angezeigt werden, während die anderen ausgeblendet werden.

$ 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"
      ]'

Dies zeigt nur die Attribute an, die wir in unserer Abfrage mit den Ergebnissen eingeschlossen haben.

Schließlich können Sie auch eine Liste von Attributen angeben, die gefiltert oder sortiert werden sollen. Dazu gehören sowohl quantitative Filterungen mit mathematischen Operatoren wie < oder > als auch Filterungen durch Einschluss in eine bestimmte Menge. Dies wird auch als facettierte Suche bezeichnet.

$ 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"
      ]
  }'

Wir können all diese Regeln kombinieren, um eine Abfrage wie die folgende durchzuführen.

$ 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

Hier suchen wir nach allen Filmen im Horror-Genre, die das Wort house im Titel enthalten, von den neuesten bis zu den ältesten. Sie sollten eine ähnliche Ausgabe erhalten.

{
  "hits": [
    {
      "id": 440559,
      "title": "Housesitters",
      "overview": "Angie und Izzy bekommen einen Housesitting-Job, der zu gut scheint, um wahr zu sein. Gruselige übernatürliche Streiche folgen.",
      "genres": [
        "Komödie",
        "Horror"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/9Gnu0PBdYzyd7ZkO74XK0xCH0iY.jpg",
      "release_date": 1524873600
    },
    {
      "id": 449550,
      "title": "Housewife",
      "overview": "Housewife dreht sich um Holly, deren Mutter ihre Schwester und ihren Vater ermordet hat, als sie sieben war. 20 Jahre später, als sie langsam den Überblick über die Unterschiede zwischen Realität und Albträumen verliert, trifft sie auf einen prominenten Hellseher, der behauptet, dass er dazu bestimmt ist, ihr zu helfen.",
      "genres": [
        "Horror"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/ohHxS7PIRQb9O6KTrDtqYshYGts.jpg",
      "release_date": 1504828800
    },
    {
      "id": 392703,
      "title": "House of Darkness",
      "overview": "Inspiriert von wahren Ereignissen erzählt der übernatürliche Thriller 'House of Darkness' die mysteriöse Geschichte einer Familie aus San Francisco, die behauptete, dass eine dunkle Kraft für die tragischen Ereignisse verantwortlich war, die sich entfaltet haben. Um ihre angeschlagene Ehe zu retten, ziehen Kelly (Sara Fletcher, 'Adulthood'), ihr Ehemann Brian (Gunner Wright, 'J. Edgar') und ihre Tochter Sarah (Mykayla Sohn, 'The Chosen') in eine ländliche Farm, um etwas Ruhe zu finden. Ohne es zu wissen, hat fast jede Familie, die in dem Haus gelebt hat, eine Form von Tragödie erlitten, die fast 100 Jahre zurückreicht. Kurz nach ihrer Ankunft beginnt Kelly zu spüren, dass sich das Verhalten ihres Mannes zunehmend seltsam und gewalttätig entwickelt. Kelly entdeckt auch, dass die Stimmen, die sie durch die Hallen hört, nicht von ihrer Tochter kommen. Werden Kelly und ihre Familie die nächsten Opfer der dunklen Kräfte im Haus sein?
      "genres": [
        "Horror",
        "Thriller",
        "TV-Film"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/ueQM9RsT0HLL2RuuiLmD07j8lKB.jpg",
      "release_date": 1460851200
    },
…

Schritt 14 - Fazit

Sie haben die Installation und Konfiguration von Meilisearch in einer Produktionsumgebung auf einem Debian 12-Server abgeschlossen. Sie haben auch einige grundlegende Suchen durchgeführt und gelernt, wie Sie die Suchergebnisse durch Ranking und Filterung verbessern können. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.