Ako nainštalovať a nakonfigurovať Meilisearch na Debian 12


Na tejto stránke

  1. Predpoklady
  2. Krok 1 - Nakonfigurujte bránu firewall
  3. Krok 2 - Nainštalujte Meilisearch
  4. Krok 3 – Vytvorte používateľa systému pre Meilisearch
  5. Krok 4 – Nakonfigurujte Meilisearch
  6. Krok 5 - Vytvorte adresáre a udeľte povolenia
  7. Krok 6 – Spustite Meilisearch ako službu
  8. Krok 7 - Nainštalujte Nginx
  9. Krok 8 - Nainštalujte SSL
  10. Krok 9 - Nakonfigurujte Nginx
  11. Krok 10 – Načítanie vzorových údajov v Meilisearch
  12. Krok 11 – Na vyhľadávanie použite obmedzené klávesy
  13. Krok 12 – Prehľadávanie vzorových údajov
  14. Krok 13 – Vyladenie hodnotenia vyhľadávania a filtrovania údajov
  15. Krok 14 - Záver

Meilisearch je open-source vyhľadávací nástroj napísaný v jazyku Rust. Napísanie pomocou Rustu vyžaduje na spustenie menej zdrojov a dá sa spustiť pomocou jedného binárneho súboru príkazového riadku. Proces inštalácie je jednoduchší ako pri alternatívnych vyhľadávačoch a vyžaduje menej krokov. Medzi jeho vlastnosti patrí fuzzy párovanie a indexovanie bez schém. Dodáva sa s webovým rozhraním na demonštračné účely. Môže byť integrovaný do rôznych webových aplikácií prostredníctvom rôznych knižníc dostupných vo viacerých jazykoch, ako je JavaScript, Python, PHP, Ruby atď.

V tomto návode sa naučíte, ako nainštalovať Meilisearch do produkcie na server Debian 12 a použiť ho na vykonanie niekoľkých jednoduchých vyhľadávaní.

Predpoklady

    Server so systémom Debian 12 s minimálne 2 GB RAM.

    Používateľ bez oprávnenia root s oprávneniami sudo.

    Nekomplikovaný firewall (UFW) je povolený a spustený.

    Plne kvalifikovaný názov domény (FQDN) ako meilisearch.example.com smerujúci na váš server. To je výhodné, ak chcete obsluhovať Meilisearch cez SSL pomocou proxy servera.

    Všetko je aktualizované.

    $ sudo apt update && sudo apt upgrade
    

    Pre tutoriál je potrebných niekoľko základných balíkov. Niektoré z nich už môžu byť nainštalované na vašom serveri.

    $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
    

Krok 1 - Nakonfigurujte bránu firewall

Prvým krokom pred inštaláciou akýchkoľvek balíkov je nakonfigurovať bránu firewall tak, aby umožňovala pripojenia HTTP a HTTPS.

Skontrolujte stav brány firewall.

$ sudo ufw status

Mali by ste vidieť niečo ako nasledovné.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Povoliť porty HTTP a HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Znova skontrolujte stav a potvrďte.

$ 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)

Krok 2 - Nainštalujte Meilisearch

Existuje niekoľko spôsobov, ako nainštalovať Meilisearch. Použijeme najjednoduchšiu metódu, ktorá zahŕňa skopírovanie binárneho súboru na náš server.

Nainštalujte si Meilisearch.

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

Urobte binárny spustiteľný.

$ chmod +x meilisearch

Práve teraz je binárny súbor použiteľný iba z adresára, do ktorého ste ho stiahli. Aby ste ho mohli používať odkiaľkoľvek, presuňte binárny súbor do adresára /usr/local/bin.

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

Skontrolujte, či je Meilisearch nainštalovaný a funguje správne.

$ meilisearch --version
meilisearch 1.7.6

Krok 3 – Vytvorte používateľa systému pre Meilisearch

Spustenie Meilisearch ako root môže spôsobiť problémy so zabezpečením. Aby ste sa im vyhli, vytvorte používateľa systému na spustenie Meilisearch.

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

Krok 4 – Nakonfigurujte Meilisearch

Predtým, ako budeme pokračovať, musíme vytvoriť hlavný kľúč, ktorý spoločnosť Meilisearch používa na proces overenia. Na jeho vytvorenie môžete použiť pomôcku príkazového riadka OpenSSL. Spustite nasledujúci príkaz na vytvorenie 30-znakového hlavného kľúča. Môžete si vybrať ľubovoľnú dĺžku hlavného kľúča. Čím dlhšie, tým lepšie.

$ openssl rand -hex 30

Mali by ste dostať podobný výstup s 30-znakovým kľúčom. Skopírujte túto hodnotu, pretože ju budeme potrebovať v nasledujúcich krokoch.

65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611

Stiahnite si najnovší konfiguračný súbor z úložiska Meilisearch GitHub a skopírujte ho do adresára /etc.

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

Otvorte ho na úpravu.

$ sudo nano /etc/meilisearch.toml

Aktualizáciou nasledujúcich riadkov v súbore nakonfigurujte cestu k databáze, cestu výpisu, adresár snímky a pracovné prostredie a pridajte hlavný kľúč, ktorý ste predtým vygenerovali na overenie.

Aktualizované hodnoty v konfiguračnom súbore by mali vyzerať takto.

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

Meilisearch zhromažďuje pravidelné údaje anonymne. Mali by ste ho vypnúť pomocou nasledujúcej možnosti. Odkomentujte ho, aby ste deaktivovali telemetriu Meilisearch.

no_analytics = true

Meilisearch štandardne nepoužíva viac ako dve tretiny dostupnej pamäte RAM vo vašom systéme. Môžete to ovládať odkomentovaním a nastavením nasledujúcej premennej. Môžete tiež zadať hodnotu ako presný počet bajtov, aby ste boli presní a presní.

max_indexing_memory = "1 GiB"

Meilisearch nevyužíva viac ako polovicu dostupných jadier CPU. Túto hodnotu však môžete ovládať odkomentovaním a nastavením nasledujúcej premennej.

max_indexing_threads = 1

Ak nastavíte túto hodnotu na vyššiu hodnotu, než je počet jadier CPU stroja, spoločnosť Meilisearch použije maximálny počet dostupných jadier.

Ďalším nastavením, ktoré by ste mali vedieť, je množstvo maximálneho užitočného zaťaženia, ktoré môže Meilisearch prijať. Predvolená hodnota je nastavená na 100 MB. Môžete to zmeniť konfiguráciou nasledujúcej premennej.

http_payload_size_limit = "100 MB"

Po dokončení uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Krok 5 - Vytvorte adresáre a udeľte povolenia

Vytvorte adresáre, do ktorých bude Meilisearch ukladať svoju databázu, výpisy databázy a snímky.

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

Nastavte vlastníka a skupinu v týchto adresároch na používateľa systému, ktorého sme vytvorili pre Meilisearch.

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

Nastavte vlastníka a skupinu v binárnom súbore Meilisearch.

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

Nastavte správne povolenia pre adresár.

$ sudo chmod 750 /var/lib/meilisearch

Krok 6 – Spustite Meilisearch ako službu

Aby bol Meilisearch vždy dostupný pre požiadavky vyhľadávania, je lepšie ho spustiť ako systémovú službu. Na to musíme vytvoriť súbor služby.

Vytvorte a otvorte /etc/systemd/system/meilisearch.service na úpravu.

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

Vložte do nej nasledujúci kód.

[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

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Povoliť službu.

$ sudo systemctl enable meilisearch

Spustite službu Meilisearch.

$ sudo systemctl start meilisearch 

Skontrolujte stav služby

$ sudo systemctl status meilisearch

Mali by ste dostať podobný výstup.

? 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 je nainštalovaný a spustený. Vystavme službu navonok pomocou servera Nginx ako reverzného proxy a pomocou Let's Encrypt ju obslúžime cez SSL.

Krok 7 - Nainštalujte Nginx

Debian 12 sa dodáva so staršou verziou Nginx. Ak chcete nainštalovať najnovšiu verziu, musíte si stiahnuť oficiálne úložisko Nginx.

Importujte podpisový kľúč Nginx.

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

Pridajte úložisko pre hlavnú verziu 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

Aktualizujte systémové úložiská.

$ sudo apt update

Nainštalujte Nginx.

$ sudo apt install nginx

Overte inštaláciu. Na systémoch Debian bude nasledujúci príkaz fungovať iba s sudo.

$ sudo nginx -v
nginx version: nginx/1.25.5

Spustite server Nginx.

$ sudo systemctl start nginx

Skontrolujte stav služby.

$ 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.

Krok 8 - Nainštalujte SSL

Na vygenerovanie certifikátu SSL musíme nainštalovať Certbot. Certbot môžete nainštalovať pomocou úložiska Debianu alebo získať najnovšiu verziu pomocou nástroja Snapd. Budeme používať verziu Snapd.

Debian 12 sa nedodáva s nainštalovaným Snapd. Nainštalujte balík Snapd.

$ sudo apt install -y snapd

Spustite nasledujúce príkazy, aby ste sa uistili, že vaša verzia Snapd je aktuálna.

$ sudo snap install core && sudo snap refresh core

Nainštalujte Certbot.

$ sudo snap install --classic certbot

Pomocou nasledujúceho príkazu zaistite spustenie príkazu Certbot vytvorením symbolického odkazu na adresár /usr/bin.

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

Overte, či Certbot funguje správne.

$ certbot --version
certbot 2.10.0

Spustite nasledujúci príkaz na vygenerovanie certifikátu SSL.

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

Vyššie uvedený príkaz stiahne certifikát do adresára /etc/letsencrypt/live/meilisearch.example.com na vašom serveri.

Vygenerujte certifikát Diffie-Hellman group.

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

Skontrolujte zoznam časovačov systemd. Certbot automaticky nainštaluje a spustí časovač na účely obnovenia.

$ sudo systemctl list-timers

Ako jednu zo služieb naplánovaných na spustenie nájdete snap.certbot.renew.service.

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.service

Vykonajte suchý chod procesu a skontrolujte, či obnovenie SSL funguje správne.

$ sudo certbot renew --dry-run

Ak nevidíte žiadne chyby, všetko je nastavené. Váš certifikát sa automaticky obnoví.

Krok 9 - Nakonfigurujte Nginx

Otvorte súbor /etc/nginx/nginx.conf na úpravu.

$ sudo nano /etc/nginx/nginx.conf

Pridajte nasledujúci riadok pred riadok include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size 64;

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Vytvorte a otvorte súbor /etc/nginx/conf.d/meilisearch.conf na úpravu.

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

Vložte do nej nasledujúci kód. Nahraďte meilisearch.example.com názvom svojej domény.

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;
}

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Overte svoju konfiguráciu Nginx.

$ sudo nginx -t

Reštartujte server Nginx.

$ sudo systemctl restart nginx

Meilisearch je teraz spustený a dostupný cez URL https://meilisearch.example.com. Keď otvoríte adresu URL, mali by ste vidieť nasledujúci text.

{"status":"Meilisearch is running"}

Túto adresu URL možno použiť iba na vyhľadávanie pomocou príkazového riadku. Ak chcete pristupovať k Meilisearch cez frontend, budete ho musieť integrovať s iným CMS alebo softvérom, aby fungoval, ktorého rozsah je mimo tohto návodu. Meilisearch sa dodáva so vstavaným frontendovým rozhraním, ktoré však funguje iba vtedy, ak ho používate na vývojové účely. V konfiguračnom súbore môžete zmeniť prostredie inštancie na vývoj a reštartovať Meilisearch, aby sa rozhranie aktivovalo. Malo by to vyzerať asi takto.

Pre produkčné prostredie budete musieť integrovať Meilisearch s iným CMS.

Začnime ho používať na indexovanie niektorých dokumentov a používajme ho na vyhľadávanie.

Krok 10 – Načítanie vzorových údajov v Meilisearch

Projekt Meilisearch poskytuje vzorový filmový súbor vo formáte JSON s údajmi stiahnutými z The Movie Database (TMDB). Stiahnite si súbor.

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

Ak chcete zobraziť časť údajov, môžete spustiť príkaz tail. Malo by to vyzerať nasledovne.

$ tail -n 3 movies.json

{"id":460070,"title":"J.T. LeRoy","overview":"A young woman named Savannah Knoop spends six years pretending to be a transgender writer named JT Leroy, the made-up literary persona of her sister-in-law.","genres":["Drama"],"poster":"https://image.tmdb.org/t/p/w500/43ffZhMCWQhzMneGP4kDWoPV48X.jpg","release_date":1556236800},
{"id":460071,"title":"Lizzie","overview":"Massachusetts, 1892. An unmarried woman of 32 and a social outcast, Lizzie lives a claustrophobic life under her father's cold and domineering control. When Bridget Sullivan, a young maid, comes to work for the family, Lizzie finds a sympathetic, kindred spirit, and a secret intimacy soon blossoms into a wicked plan.","genres":["Crime","Drama","Thriller"],"poster":"https://image.tmdb.org/t/p/w500/z2iuBcwznen3kC9z4LeOzBSz1BB.jpg","release_date":1536883200}
]

Ako vidíte, každý jednotlivý záznam obsahuje ID, názov, odkaz na obrázok plagátu, prehľad filmu, dátum vydania a zoznam žánrov. Dátum vydania je vo formáte EPOCH.

Načítajme údaje do Meilisearch pomocou curl cez požiadavku HTTP POST.

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

Poďme si prejsť argumenty príkazu:

  • -X POST – určuje, že vykonávame požiadavku HTTP POST a odosielame údaje.
  • -H Content-Type – určuje typ obsahu súboru.
  • -H Autorizácia: Nositeľ – je odovzdanie hlavného kľúča s vašimi požiadavkami.
  • --data-binary – určuje súbor, ktorý sa má zahrnúť.

Tu vytvárame nový index Meilisearch v umiestnení /indexes/movies/documents. Mali by ste dostať podobný výstup, ktorý vám oznámi, že požiadavka bola zaradená do frontu. Meilisearch spracováva všetky požiadavky asynchrónne.

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

Vyššie uvedený príkaz môžete spustiť aj tak, že URL http://localhost:7700 nahradíte https://meilisearch.example.com a bude fungovať rovnako. Môžete to urobiť pre všetky príkazy v tomto návode, ale kvôli jednoduchosti sa budeme držať adresy URL http://localhost:7700.

Ak chcete skontrolovať stav požiadavky, spustite nasledujúci príkaz.

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

Mali by ste dostať podobný výstup.

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

To nám hovorí, že úloha bola dokončená a databáza filmov je teraz plne indexovaná a pripravená na použitie.

Krok 11 – Na vyhľadávanie použite obmedzené klávesy

Potrebujeme jeden nástroj, ktorý pomáha s čitateľným formátovaním JSON príkazového riadka. Nazýva sa jq. Spustite nasledujúci príkaz a nainštalujte ho.

$ sudo apt install -y jq

Aj keď sme do konfiguračného súboru pridali hlavný kľúč, pri každej požiadavke ho budete musieť odovzdať znova. Predtým, ako budeme pokračovať, potrebujeme obmedzenejší kľúč, ktorý umožní režim iba na čítanie. Meiliserch štandardne vytvára predvolený kľúč len na čítanie. Poďme to chytiť.

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

Mali by ste vidieť podobný výstup.

{
  "results": [
    {
      "name": "Default Search API Key",
      "description": "Use it to search from the 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": "Use it for anything that is not a search operation. Caution! Do not expose it on a public frontend",
      "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
}

Odteraz budeme na vyhľadávanie používať Predvolený kľúč API vyhľadávania.

Krok 12 – Prehľadávanie vzorových údajov

Existujú dva spôsoby vyhľadávania pomocou Meilisearch, môžete použiť API cez príkazový riadok alebo použiť webové rozhranie. Webové rozhranie je pomerne obmedzené a funguje iba vtedy, ak používate Meilisearch vo vývojovom prostredí a API je odporúčaný spôsob používania Meilisearch. Keďže sme naše vyhľadávanie nakonfigurovali pre produkciu, použijeme iba metódu príkazového riadku.

Vyhľadávanie cez API je ako nahrávanie dát cez HTTP POST požiadavku. Zadáte požiadavku na koncový bod /search rozhrania API. Hľadajme napríklad filmy so slovom saint.

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

Mali by ste dostať výstup naformátovaný v JSON, ako je nasledujúci.

{
  "hits": [
    {
      "id": 25248,
      "title": "Saint Ralph",
      "overview": "This Canadian made comedy/drama, set in Hamilton, Ontario in 1954, is a sweet and - at times - goofy story that becomes increasingly poignant as the minutes tick by.  It's the fictional tale of a wayward 9th grader, Ralph (Adam Butcher), who is secretly living on his own while his widowed, hospitalized mother remains immersed in a coma. Frequently in trouble with Father Fitzpatrick (Gordon Pinsent), the principal of his all-boys, Catholic school, Ralph is considered something of a joke among peers until he decides to pull off a miracle that could save his mother, i.e., winning the Boston Marathon.  Coached by a younger priest and former runner, Father Hibbert (Campbell Scott), whose cynicism has been lifted by the boy's pure hope, Ralph applies himself to his unlikely mission, fending off naysayers and getting help along a very challenging path from sundry allies and friends.",
      "genres": [
        "Comedy",
        "Drama"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
      "release_date": 1123200000
    },
    {
      "id": 26894,
      "title": "Saint Sinner",
      "overview": "In 1815 a monk, Tomas Alcala, unwittingly unleashes two female succubi, Munkar and Nakir, upon an unsuspecting 21st century. He is chosen by God to travel through the centuries and stop the demons' rampage.",
      "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": "An ex-gambler is lured back into the game by a veteran insurance-fraud investigator.",
      "genres": [
        "Comedy"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/kN4Vur1SccouDR0k3tmJXJHdrXw.jpg",
      "release_date": 1264723200
    },
  ...

Na otestovanie funkcie fuzzy zhody Meilisearch, v ktorej možno použiť podobne znejúce slová na nájdenie presného vyhľadávania. To je užitočné v prípade, že urobíte preklep a napriek tomu očakávate správny výsledok.

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

Tu sme nesprávne napísali saint ako seint a Meilisearch bude stále vracať záznamy so slovom saint.

{
  "hits": [
    {
      "id": 10105,
      "title": "Saints and Soldiers",
      "overview": "Five American soldiers fighting in Europe during World War II struggle to return to Allied territory after being separated from U.S. forces during the historic Malmedy Massacre.",
      "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": "This Canadian made comedy/drama, set in Hamilton, Ontario in 1954, is a sweet and - at times - goofy story that becomes increasingly poignant as the minutes tick by.  It's the fictional tale of a wayward 9th grader, Ralph (Adam Butcher), who is secretly living on his own while his widowed, hospitalized mother remains immersed in a coma. Frequently in trouble with Father Fitzpatrick (Gordon Pinsent), the principal of his all-boys, Catholic school, Ralph is considered something of a joke among peers until he decides to pull off a miracle that could save his mother, i.e., winning the Boston Marathon.  Coached by a younger priest and former runner, Father Hibbert (Campbell Scott), whose cynicism has been lifted by the boy's pure hope, Ralph applies himself to his unlikely mission, fending off naysayers and getting help along a very challenging path from sundry allies and friends.",
      "genres": [
        "Comedy",
        "Drama"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/3MdWgqUunIBWnc7mYi2dtZrD54Y.jpg",
      "release_date": 1123200000
    },
    {
      "id": 26894,
      "title": "Saint Sinner",
      "overview": "In 1815 a monk, Tomas Alcala, unwittingly unleashes two female succubi, Munkar and Nakir, upon an unsuspecting 21st century. He is chosen by God to travel through the centuries and stop the demons' rampage.",
      "genres": [
        "Fantasy",
        "Horror",
        "Science Fiction",
        "TV Movie"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/cxljKsfUI6PVFPIgPvsesUWHai4.jpg",
      "release_date": 1035590400
    },
 …

Krok 13 – Vyladenie hodnotenia vyhľadávania a filtrovania údajov

Vyhľadávače môžu vrátiť lepšie výsledky, ak vedia, ako zoradiť alebo dať dôležitosť určitým výsledkom na základe dôležitosti konkrétnej oblasti. Meilisearch má predvolenú sadu pravidiel skreslenia, ktoré môžete nakonfigurovať na zlepšenie výsledkov vyhľadávania.

Najprv však musíme skontrolovať pravidlá hodnotenia stanovené spoločnosťou Meilisearch.

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

Dostanete nasledujúci výstup.

["words","typo","proximity","attribute","sort","exactness"]
  1. slová - výsledky sú zoradené podľa klesajúceho počtu zhodných výrazov.
  2. preklep - výsledky sú zoradené podľa zvyšovania počtu preklepov. V hornej časti sa vráti menej preklepových dotazov.
  3. blízkosť - výsledky sú zoradené podľa vzdialenosti medzi vyhovujúcimi výrazmi.
  4. atribút - výsledky sú zoradené podľa poradia podľa atribútu.
  5. zoradiť - výsledky sú zoradené podľa parametrov, o ktorých sa rozhodlo v čase dopytu.
  6. presnosť - výsledky sú zoradené podľa podobnosti zhodných slov so slovami dopytu.

Viac o relevantnosti si môžete prečítať v oficiálnej dokumentácii Meilisearch.

Ak chcete zmeniť poradie pravidiel skreslenia, zadajte nasledujúci príkaz.

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

Teraz poďme filtrovať výsledky vyhľadávania. Najprv požiadajme Meilisearch, aby na vyhľadávanie použil iba určité atribúty a vynechal nezmyselné atribúty ako id bokom.

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

Tu vykonávame vyhľadávanie iba pomocou atribútov title, overview a genres, ktoré poskytnú lepšie výsledky.

Ďalej môžeme naformátovať naše výsledky vyhľadávania tak, aby zobrazovali iba určité atribúty, zatiaľ čo ostatné skryli.

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

Zobrazia sa iba atribúty, ktoré sme zahrnuli do nášho dotazu s výsledkami.

Nakoniec môžete poskytnúť aj zoznam atribútov, ktoré sa majú filtrovať alebo triediť. Zahŕňa to kvantitatívne filtrovanie pomocou matematických operátorov ako < alebo > a filtrovanie prostredníctvom zahrnutia do špecifikovanej množiny. Hovorí sa tomu aj fazetované vyhľadávanie.

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

Všetky tieto pravidlá môžeme skombinovať, aby sme vykonali dotaz, ako je nasledujúci.

$ 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

Tu hľadáme všetky filmy hororového žánru od najnovších po najstarší, ktoré obsahujú v názve slovo dom. Mali by ste dostať podobný výstup.

{
  "hits": [
    {
      "id": 440559,
      "title": "Housesitters",
      "overview": "Angie and Izzy get a housesitting gig that seems too good to be true. 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 is centered on Holly whose mother murdered her sister and father when she was seven. 20 years later and slowly losing her grip on the difference between reality and nightmares, she runs into a celebrity psychic who claims that he is destined to help her.",
      "genres": [
        "Horror"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/ohHxS7PIRQb9O6KTrDtqYshYGts.jpg",
      "release_date": 1504828800
    },
    {
      "id": 392703,
      "title": "House of Darkness",
      "overview": "Inspired by true events, the supernatural thriller \"House of Darkness\" recounts the mysterious case of a San Francisco family who claimed that a dark force was responsible for the tragic events that unfolded.  Trying to save their struggling marriage Kelly (Sara Fletcher, \"Adulthood\"), her husband Brian (Gunner Wright, \"J. Edgar\") and their daughter Sarah (Mykayla Sohn, \"The Chosen\") move to a rural farmhouse in search of some serenity. Unbeknownst to them, nearly every family that has lived in the house has suffered some form of tragedy, dating back nearly 100 years. Shortly after their arrival, Kelly begins to sense that her husband’s behavior is growing increasingly strange and violent. Kelly also comes to discover the voices she’s hearing echoing through the halls, are not coming from her daughter. Will Kelly and her family be the next victims of the dark forces in the house?",
      "genres": [
        "Horror",
        "Thriller",
        "TV Movie"
      ],
      "poster": "https://image.tmdb.org/t/p/w500/ueQM9RsT0HLL2RuuiLmD07j8lKB.jpg",
      "release_date": 1460851200
    },
…

Krok 14 - Záver

Dokončili ste inštaláciu a konfiguráciu Meilisearch v produkčnom prostredí na serveri Debian 12. Vykonali ste aj niekoľko základných vyhľadávaní a naučili ste sa, ako zlepšiť výsledky vyhľadávania pomocou hodnotenia a filtrovania. Ak máte nejaké otázky, napíšte ich do komentárov nižšie.