Ինչպես տեղադրել և կարգավորել Meilisearch-ը Debian 12-ում
Այս էջում
- Նախադրյալներ
- Քայլ 1 - Կարգավորել Firewall-ը
- Քայլ 2 - Տեղադրեք Meilisearch-ը
- Քայլ 3 - Ստեղծեք համակարգի օգտվող Meilisearch-ի համար
- Քայլ 4 - Կարգավորեք Meilisearch-ը
- Քայլ 5 - Ստեղծեք դիրեկտորիաներ և տվեք թույլտվություններ
- Քայլ 6 - Գործարկել Meilisearch-ը որպես ծառայություն
- Քայլ 7 - Տեղադրեք Nginx
- Քայլ 8 - Տեղադրեք SSL-ը
- Քայլ 9 - Կարգավորեք Nginx-ը
- Քայլ 10 - Նմուշի տվյալների բեռնում Meilisearch-ում
- Քայլ 11 - Օգտագործեք սահմանափակ բանալիներ որոնման համար
- Քայլ 12 - Նմուշի տվյալների որոնում
- Քայլ 13 - Որոնման վարկանիշի կարգավորում և տվյալների զտում
- Քայլ 14 - Եզրակացություն
Meilisearch-ը բաց կոդով որոնման համակարգ է՝ գրված Rust լեզվով: Rust-ի միջոցով գրված լինելը պահանջում է ավելի քիչ ռեսուրսներ գործարկելու համար և կարող է գործարկվել մեկ հրամանի տողի երկուական տարբերակով: Տեղադրման գործընթացն ավելի պարզ է, քան այլընտրանքային որոնման համակարգերը և պահանջում է ավելի քիչ քայլեր: Դրա առանձնահատկությունները ներառում են մշուշոտ համընկնումը և սխեմաների պակասի ինդեքսավորումը: Այն գալիս է վեբ ճակատով ցուցադրական նպատակներով: Այն կարող է ինտեգրվել տարբեր վեբ հավելվածների մեջ տարբեր գրադարանների միջոցով, որոնք հասանելի են բազմաթիվ լեզուներով, ինչպիսիք են JavaScript, Python, PHP, Ruby և այլն:
Այս ձեռնարկում դուք կսովորեք, թե ինչպես տեղադրել Meilisearch-ը արտադրության մեջ Debian 12 սերվերի վրա և օգտագործել այն մի քանի պարզ որոնումներ կատարելու համար:
Նախադրյալներ
Debian 12-ով աշխատող սերվեր՝ նվազագույնը 2 ԳԲ օպերատիվ հիշողությամբ:
Ոչ արմատային օգտատեր՝ sudo արտոնություններով:
Ոչ բարդ Firewall-ը (UFW) միացված է և աշխատում է:
Լիովին որակավորված տիրույթի անուն (FQDN), ինչպիսին է meilisearch.example.com
-ը, որը ցույց է տալիս ձեր սերվերը: Սա ձեռնտու է, եթե ցանկանում եք սպասարկել Meilisearch-ը SSL-ի միջոցով՝ օգտագործելով պրոքսի սերվեր:
Ամեն ինչ թարմացվում է։
$ sudo apt update && sudo apt upgrade
Դասընթացի համար անհրաժեշտ են մի քանի հիմնական փաթեթներ: Դրանցից մի քանիսը կարող են արդեն տեղադրված լինել ձեր սերվերում:
$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
Քայլ 1 - Կարգավորել Firewall-ը
Փաթեթներ տեղադրելուց առաջ առաջին քայլը firewall-ի կազմաձևումն է, որպեսզի թույլ տա HTTP և HTTPS կապեր:
Ստուգեք firewall-ի կարգավիճակը:
$ sudo ufw status
Դուք պետք է տեսնեք հետևյալի նման մի բան.
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Թույլատրել HTTP և HTTPs նավահանգիստները:
$ sudo ufw allow http
$ sudo ufw allow https
Ստուգեք կարգավիճակը կրկին հաստատելու համար:
$ 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)
Քայլ 2 - Տեղադրեք Meilisearch-ը
Meilisearch-ը տեղադրելու մի քանի եղանակ կա: Մենք կօգտագործենք ամենապարզ մեթոդը, որը ներառում է երկուական ֆայլի պատճենումը մեր սերվերին:
Տեղադրեք Meilisearch-ը:
$ curl -L https://install.meilisearch.com | sh
Դարձրեք երկուական գործարկելի:
$ chmod +x meilisearch
Այս պահին երկուականը կարող է օգտագործվել միայն այն գրացուցակից, որտեղ այն ներբեռնել եք: Այն ցանկացած վայրից օգտագործելու համար երկուական ֆայլը տեղափոխեք /usr/local/bin
գրացուցակ:
$ sudo mv ./meilisearch /usr/local/bin/
Հաստատեք, որ Meilisearch-ը տեղադրված է և աշխատում է ճիշտ:
$ meilisearch --version
meilisearch 1.7.6
Քայլ 3 - Ստեղծեք համակարգի օգտվող Meilisearch-ի համար
Meilisearch-ը որպես root գործարկելը կարող է անվտանգության խնդիրներ առաջացնել: Դրանցից խուսափելու համար ստեղծեք համակարգի օգտատեր Meilisearch-ը գործարկելու համար:
$ sudo useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearch
Քայլ 4 - Կարգավորեք Meilisearch-ը
Նախքան առաջ շարժվելը, մենք պետք է ստեղծենք հիմնական բանալին, որը Meilisearch-ն օգտագործում է նույնականացման գործընթացի համար։ Այն ստեղծելու համար կարող եք օգտագործել OpenSSL հրամանի տող ծրագիրը: Գործարկեք հետևյալ հրամանը՝ 30 նիշանոց հիմնական բանալի ստեղծելու համար: Դուք կարող եք ընտրել ցանկացած երկարություն ձեր հիմնական բանալին: Որքան երկար, այնքան լավ:
$ openssl rand -hex 30
Դուք պետք է ստանաք նմանատիպ արդյունք 30 նիշանոց ստեղնով: Պատճենեք այս արժեքը, քանի որ այն մեզ անհրաժեշտ կլինի հաջորդ քայլերում:
65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611
Վերցրեք վերջին կազմաձևման ֆայլը Meilisearch GitHub պահոցից և պատճենեք այն /etc
գրացուցակում:
$ sudo sh -c 'curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml'
Բացեք այն խմբագրելու համար:
$ sudo nano /etc/meilisearch.toml
Թարմացրեք ֆայլի հետևյալ տողերը՝ տվյալների բազայի ուղին, աղբահանության ուղին, լուսանկարի գրացուցակը և աշխատանքային միջավայրը կարգավորելու համար և նույնականացման համար ավելացրեք նախկինում ստեղծած հիմնական բանալին:
Կազմաձևման ֆայլում թարմացված արժեքները պետք է նման լինեն հետևյալին.
env = "production"
master_key = "173e95f077590ed33dad89247247be8d8ce8b6722ccc87829aaefe3207be"
db_path = "/var/lib/meilisearch/data"
dump_dir = "/var/lib/meilisearch/dumps"
snapshot_dir = "/var/lib/meilisearch/snapshots"
Meilisearch-ը կանոնավոր տվյալներ է հավաքում անանուն: Դուք պետք է անջատեք այն՝ օգտագործելով հետևյալ տարբերակը. Անջատեք այն՝ Meilisearch-ի հեռաչափությունն անջատելու համար:
no_analytics = true
Լռելյայնորեն, Meilisearch-ն օգտագործում է ձեր համակարգում առկա RAM-ի ոչ ավելի, քան երկու երրորդը: Դուք կարող եք դա վերահսկել՝ չմեկնաբանելով և սահմանելով հետևյալ փոփոխականը։ Դուք կարող եք նաև նշել արժեքը որպես բայթերի ճշգրիտ քանակ՝ ճշգրիտ և ճշգրիտ լինելու համար:
max_indexing_memory = "1 GiB"
Meilisearch-ն օգտագործում է հասանելի պրոցեսորի միջուկների կեսից ոչ ավելին: Այնուամենայնիվ, դուք կարող եք վերահսկել այս արժեքը՝ չմեկնաբանելով և սահմանելով հետևյալ փոփոխականը:
max_indexing_threads = 1
Այս արժեքը սարքի պրոցեսորի միջուկների քանակից ավելի սահմանելը Meilisearch-ին հուշում է օգտագործել հասանելի միջուկների առավելագույն քանակը:
Եվս մեկ պարամետր, որը դուք պետք է իմանաք, առավելագույն ծանրաբեռնվածության չափն է, որը կարող է վերցնել Meilisearch-ը: Նախնական արժեքը սահմանվել է 100 ՄԲ: Դուք կարող եք փոխել այն՝ կարգավորելով հետևյալ փոփոխականը։
http_payload_size_limit = "100 MB"
Ավարտելուց հետո պահեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ հուշվի:
Քայլ 5 - Ստեղծեք դիրեկտորիաներ և տվեք թույլտվություններ
Ստեղծեք դիրեկտորիաներ, որտեղ Meilisearch-ը կպահի իր տվյալների բազան, տվյալների բազայի աղբարկղերը և լուսանկարները:
$ sudo mkdir /var/lib/meilisearch/dumps -p
$ sudo mkdir /var/lib/meilisearch/snapshots
Այս դիրեկտորիաների սեփականատերը և խումբը սահմանեք համակարգի օգտագործողին, որը մենք ստեղծել ենք Meilisearch-ի համար:
$ sudo chown -R meilisearch:meilisearch /var/lib/meilisearch
Սահմանեք սեփականատերը և խումբը Meilisearch երկուական ֆայլի վրա:
$ sudo chown meilisearch:meilisearch /usr/local/bin/meilisearch
Նշեք համապատասխան թույլտվությունները գրացուցակում:
$ sudo chmod 750 /var/lib/meilisearch
Քայլ 6 - Գործարկել Meilisearch-ը որպես ծառայություն
Որոնման հարցումների համար Meilisearch-ը միշտ հասանելի դարձնելու համար ավելի լավ է այն գործարկել որպես համակարգային ծառայություն: Դրա համար մենք պետք է ստեղծենք ծառայության ֆայլ դրա համար:
Ստեղծեք և բացեք /etc/systemd/system/meilisearch.service
խմբագրման համար:
$ sudo nano /etc/systemd/system/meilisearch.service
Դրա մեջ տեղադրեք հետևյալ կոդը.
[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
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ հուշում է:
Միացնել ծառայությունը:
$ sudo systemctl enable meilisearch
Սկսեք Meilisearch ծառայությունը:
$ sudo systemctl start meilisearch
Ստուգեք ծառայության կարգավիճակը
$ sudo systemctl status meilisearch
Դուք պետք է ստանաք նմանատիպ արդյունք:
? 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-ը տեղադրված է և աշխատում է: Եկեք բացահայտենք ծառայությունը արտաքինից՝ օգտագործելով Nginx սերվերը որպես հակադարձ պրոքսի և օգտագործենք Let's Encrypt՝ այն SSL-ով սպասարկելու համար:
Քայլ 7 - Տեղադրեք Nginx
Debian 12-ը առաքվում է Nginx-ի հին տարբերակով: Վերջին տարբերակը տեղադրելու համար անհրաժեշտ է ներբեռնել պաշտոնական Nginx պահոցը:
Ներմուծեք Nginx-ի ստորագրման բանալին:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Ավելացրեք պահեստը 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
Թարմացրեք համակարգի պահեստները:
$ sudo apt update
Տեղադրեք Nginx-ը:
$ sudo apt install nginx
Ստուգեք տեղադրումը: Debian համակարգերում հետևյալ հրամանը կաշխատի միայն sudo
-ի հետ։
$ sudo nginx -v
nginx version: nginx/1.25.5
Գործարկեք Nginx սերվերը:
$ sudo systemctl start nginx
Ստուգեք ծառայության կարգավիճակը:
$ 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.
Քայլ 8 - Տեղադրեք SSL-ը
SSL վկայագիր ստեղծելու համար մենք պետք է տեղադրենք Certbot-ը: Կարող եք կա՛մ տեղադրել Certbot-ը՝ օգտագործելով Debian-ի պահոցը, կա՛մ գրավել վերջին տարբերակը՝ օգտագործելով Snapd գործիքը: Մենք կօգտագործենք Snapd տարբերակը:
Debian 12-ը չի գալիս Snapd-ի տեղադրմամբ: Տեղադրեք Snapd փաթեթը:
$ sudo apt install -y snapd
Գործարկեք հետևյալ հրամանները՝ համոզվելու համար, որ Snapd-ի ձեր տարբերակը արդիական է:
$ sudo snap install core && sudo snap refresh core
Տեղադրեք Certbot-ը:
$ sudo snap install --classic certbot
Օգտագործեք հետևյալ հրամանը՝ համոզվելու համար, որ Certbot հրամանը կարող է գործարկվել՝ ստեղծելով խորհրդանշական հղում դեպի /usr/bin
գրացուցակը:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Ստուգեք, արդյոք Certbot-ը ճիշտ է աշխատում:
$ certbot --version
certbot 2.10.0
Գործարկեք հետևյալ հրամանը՝ SSL վկայական ստեղծելու համար:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d meilisearch.example.com
Վերոնշյալ հրամանը վկայական կներբեռնի ձեր սերվերի /etc/letsencrypt/live/meilisearch.example.com
գրացուցակում:
Ստեղծեք Diffie-Hellman խումբ վկայագիր:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Ստուգեք համակարգված ժամանակաչափերի ցանկը: Certbot-ը ավտոմատ կերպով տեղադրում և գործարկում է ժմչփը նորացման նպատակով:
$ sudo systemctl list-timers
Դուք կգտնեք 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
Կատարեք գործընթացի չոր գործարկում՝ ստուգելու, թե արդյոք SSL-ի նորացումը լավ է աշխատում:
$ sudo certbot renew --dry-run
Եթե սխալներ չեք տեսնում, ամեն ինչ պատրաստ է: Ձեր վկայականը ինքնաբերաբար կերկարաձգվի:
Քայլ 9 - Կարգավորեք Nginx-ը
Բացեք ֆայլը /etc/nginx/nginx.conf
խմբագրման համար:
$ sudo nano /etc/nginx/nginx.conf
Ավելացրեք հետևյալ տողը include /etc/nginx/conf.d/*.conf;
տողից առաջ:
server_names_hash_bucket_size 64;
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ հուշում է:
Ստեղծեք և բացեք ֆայլը /etc/nginx/conf.d/meilisearch.conf
խմբագրման համար:
$ sudo nano /etc/nginx/conf.d/meilisearch.conf
Դրա մեջ տեղադրեք հետևյալ կոդը. Փոխարինեք meilisearch.example.com
ձեր տիրույթի անունով:
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;
}
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ հուշում է:
Ստուգեք ձեր Nginx կոնֆիգուրացիան:
$ sudo nginx -t
Վերագործարկեք Nginx սերվերը:
$ sudo systemctl restart nginx
Meilisearch-ն այժմ աշխատում է և հասանելի է https://meilisearch.example.com
URL-ի միջոցով: URL-ը բացելիս դուք պետք է տեսնեք հետևյալ տեքստը:
{"status":"Meilisearch is running"}
Այս URL-ը կարող է օգտագործվել միայն հրամանի տողի միջոցով որոնելու համար: Եթե ցանկանում եք մուտք գործել Meilisearch ֆրոնտեդի միջոցով, ապա ձեզ հարկավոր է այն ինտեգրել մեկ այլ CMS-ի կամ ծրագրաշարի հետ, որպեսզի այն աշխատի, որի շրջանակը դուրս է այս ձեռնարկից: Meilisearch-ը մատակարարվում է ներկառուցված ճակատային ինտերֆեյսով, բայց այն աշխատում է միայն այն դեպքում, եթե դուք այն օգտագործում եք զարգացման նպատակներով: Կարգավորման ֆայլում կարող եք փոխել օրինակի միջավայրը մշակում
և վերագործարկել Meilisearch-ը` ինտերֆեյսը ակտիվացնելու համար: Այն պետք է նման լինի հետևյալին.
Արտադրական միջավայրի համար դուք պետք է ինտեգրեք Meilisearch-ը մեկ այլ CMS-ի հետ:
Եկեք սկսենք օգտագործել այն որոշ փաստաթղթեր ինդեքսավորելու և որոնելու համար օգտագործելու համար:
Քայլ 10 - Նմուշի տվյալների բեռնում Meilisearch-ում
Meilisearch նախագիծը տրամադրում է JSON ֆորմատավորված ֆիլմի նմուշ՝ The Movie Database-ից (TMDB) ջնջված տվյալներով: Ներբեռնեք ֆայլը։
$ wget https://www.meilisearch.com/movies.json
Տվյալների մի մասը տեսնելու համար կարող եք գործարկել tail հրամանը: Այն պետք է նմանվի հետևյալին.
$ 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}
]
Ինչպես տեսնում եք, յուրաքանչյուր առանձին գրառում պարունակում է ID, վերնագիր, պաստառի պատկերի հղում, ֆիլմի ակնարկ, թողարկման ամսաթիվ և ժանրերի ցանկ: Թողարկման ամսաթիվը EPOCH ձևաչափով է:
Եկեք բեռնենք տվյալները Meilisearch-ում՝ օգտագործելով curl՝ HTTP POST հարցման միջոցով:
$ curl \
-X POST 'http://localhost:7700/indexes/movies/documents' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' \
--data-binary @movies.json
Եկեք անցնենք հրամանի փաստարկները.
- -X POST
- նշում է, որ մենք կատարում ենք HTTP POST հարցում և ուղարկում ենք տվյալներ: - -H Content-Type - նշում է ֆայլի բովանդակության տեսակը:
- -H Թույլտվություն. կրող - այն է, որ փոխանցեք հիմնական բանալին ձեր հարցումների հետ:
- --data-binary - նշում է այն ֆայլը, որը պետք է ներառվի:
Այստեղ մենք ստեղծում ենք Meilisearch-ի նոր ինդեքս՝ /indexes/movies/documents
վայրում: Դուք պետք է ստանաք նմանատիպ արդյունք, որը կտեղեկացնի ձեզ, որ հարցումը հերթագրվել է: Meilisearch-ը մշակում է բոլոր հարցումները ասինքրոն:
{"taskUid":0,"indexUid":"movies","status":"enqueued","type":"documentAdditionOrUpdate","enqueuedAt":"2024-05-03T03:12:55.599798591Z"}
Կարող եք նաև գործարկել վերը նշված հրամանը՝ http://localhost:7700
URL-ը փոխարինելով https://meilisearch.example.com
-ով, և այն կաշխատի նույն կերպ: Դուք կարող եք դա անել այս ձեռնարկի բոլոր հրամանների համար, բայց պարզության համար մենք կպահենք http://localhost:7700
URL-ին:
Գործարկեք հետևյալ հրամանը՝ հարցումի կարգավիճակը ստուգելու համար։
$ curl -X GET 'http://localhost:7700/indexes/movies/tasks/0'
Դուք պետք է ստանաք նմանատիպ արդյունք:
{"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"}
Սա մեզ ասում է, որ առաջադրանքն ավարտված է, և ֆիլմերի տվյալների բազան այժմ ամբողջությամբ ինդեքսավորված է և պատրաստ է օգտագործման:
Քայլ 11 - Օգտագործեք սահմանափակ բանալիներ որոնման համար
Մեզ անհրաժեշտ է մեկ գործիք, որն օգնում է ընթեռնելի հրամանի տողի JSON ձևաչափմանը: Այն կոչվում է jq
։ Այն տեղադրելու համար գործարկեք հետևյալ հրամանը.
$ sudo apt install -y jq
Թեև մենք ավելացրել ենք հիմնական բանալին կազմաձևման ֆայլին, դուք պետք է այն նորից փոխանցեք յուրաքանչյուր հարցում: Նախքան առաջ շարժվելը, մեզ ավելի սահմանափակ բանալի է պետք, որը թույլ կտա միայն կարդալու ռեժիմը: Meiliserch-ը լռելյայն ստեղծում է լռելյայն միայն կարդալու բանալի: Եկեք բռնենք այն:
$ curl -X GET 'http://localhost:7700/keys' -H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' | jq
Դուք պետք է տեսնեք նմանատիպ արդյունք:
{
"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
}
Այսուհետ մենք կօգտագործենք Default Search API ստեղնը՝ որոնումներ կատարելու համար:
Քայլ 12 - Նմուշի տվյալների որոնում
Meilisearch-ի միջոցով որոնելու երկու եղանակ կա, կարող եք կամ օգտագործել API հրամանի տողի միջոցով կամ օգտագործել վեբ ինտերֆեյսը: Վեբ ինտերֆեյսը բավականին սահմանափակ է և աշխատում է միայն այն դեպքում, եթե դուք օգտագործում եք Meilisearch-ը զարգացման միջավայրում, և API-ն Meilisearch-ն օգտագործելու առաջարկվող միջոցն է: Քանի որ մենք կազմաձևել ենք արտադրության մեր որոնումը, մենք կօգտագործենք միայն հրամանի տողի մեթոդը:
API-ի միջոցով որոնումը նման է HTTP POST հարցման միջոցով տվյալների վերբեռնմանը: Դուք հարցում եք կատարում API-ի /search
վերջնակետին: Օրինակ, եկեք փնտրենք ցանկացած ֆիլմ, որի մեջ կա saint
բառը:
$ curl \
-X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
--data-binary '{ "q": "saint" }' | jq
Դուք պետք է ստանաք JSON-ով ձևաչափված ելք, ինչպես հետևյալը:
{
"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
},
...
Meilisearch-ի անորոշ համընկնման հատկանիշը ստուգելու համար, որում կարող են օգտագործվել նմանատիպ հնչյունավոր բառեր՝ ճշգրիտ որոնումը գտնելու համար: Սա օգտակար է, եթե դուք տառասխալ եք թույլ տալիս և դեռ ճիշտ արդյունք եք ակնկալում:
$ curl \
-X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \
--data-binary '{ "q": "seint" }' | jq
Այստեղ մենք սխալ ենք գրել saint
որպես seint
, իսկ Meilisearch-ը դեռ կվերադարձնի 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
},
…
Քայլ 13 - Որոնման վարկանիշի կարգավորում և տվյալների զտում
Որոնման համակարգերը կարող են ավելի լավ արդյունքներ տալ, եթե նրանք գիտեն, թե ինչպես դասակարգել կամ կարևորել որոշակի արդյունքներ՝ հիմնվելով որոշակի ոլորտի կարևորության վրա: Meilisearch-ն ունի կողմնակալության կանոնների լռելյայն մի շարք, որոնք կարող եք կարգավորել ձեր որոնման արդյունքները բարելավելու համար:
Բայց նախ, մենք պետք է ստուգենք Meilisearch-ի կողմից սահմանված վարկանիշային կանոնները:
$ curl -X GET 'http://localhost:7700/indexes/movies/settings/ranking-rules' -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196'
Դուք կստանաք հետևյալ արդյունքը.
["words","typo","proximity","attribute","sort","exactness"]
- բառեր - արդյունքները դասակարգվում են համընկնող տերմինների քանակի նվազմամբ:
- տառասխալ - արդյունքները դասակարգվում են՝ ավելացնելով տառասխալների քանակը: Ավելի քիչ տառասխալ հարցումներ են վերադարձվում վերևում:
- հարևանություն - արդյունքները դասակարգվում են՝ ավելացնելով համապատասխան տերմինների միջև հեռավորությունը:
- հատկանիշ - արդյունքները դասավորված են ըստ ատրիբուտների դասակարգման կարգի:
- տեսակավորում - արդյունքները դասակարգվում են ըստ հարցման ժամանակ որոշված պարամետրերի:
- ճշգրտություն - արդյունքները դասավորված են ըստ հարցման բառերի համապատասխան բառերի նմանության:
Համապատասխանության մասին ավելին կարող եք կարդալ Meilisearch-ի պաշտոնական փաստաթղթերում:
Թողարկեք հետևյալ հրամանը՝ կողմնակալության կանոնների կարգը փոխելու համար:
$ 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"
]'
Այժմ եկեք զտենք որոնման արդյունքները: Նախ, եկեք խնդրենք Meilisearch-ին օգտագործել միայն որոշակի ատրիբուտներ որոնումն իրականացնելու համար և մի կողմ թողնել անիմաստ ատրիբուտները, ինչպիսիք են 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"
]
}'
Այստեղ մենք որոնում ենք կատարում միայն title
, overview
և ժանրերի
հատկանիշներով, որոնք ավելի լավ արդյունքներ կտան:
Հաջորդը, մենք կարող ենք ձևաչափել մեր որոնման արդյունքները, որպեսզի ցուցադրվեն միայն որոշակի հատկանիշներ, մինչդեռ թաքցնենք մյուսները:
$ 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"
]'
Սա ցույց կտա միայն այն հատկանիշները, որոնք մենք ներառել ենք մեր հարցման արդյունքների հետ:
Վերջապես, դուք կարող եք նաև տրամադրել զտման կամ տեսակավորվող ատրիբուտների ցանկ: Սա ներառում է ինչպես քանակական ֆիլտրում, այնպես էլ մաթեմատիկական օպերատորների միջոցով, ինչպիսիք են < կամ >-ը, և զտումը նշված հավաքածուում ներառելու միջոցով: Սա նաև կոչվում է երեսպատման որոնում:
$ 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"
]
}'
Մենք կարող ենք համատեղել այս բոլոր կանոնները՝ հետևյալ հարցումը կատարելու համար:
$ 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
Այստեղ մենք փնտրում ենք Սարսափ ժանրի բոլոր ֆիլմերը՝ ամենանորից մինչև ամենահինը, որոնք վերնագրում պարունակում են house
բառը: Դուք պետք է ստանաք նմանատիպ արդյունք:
{
"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
},
…
Քայլ 14 - Եզրակացություն
Դուք ավարտել եք Meilisearch-ի տեղադրումը և կարգավորումը Debian 12 սերվերի արտադրական միջավայրում: Դուք նաև կատարել եք մի քանի հիմնական որոնումներ և սովորել եք, թե ինչպես բարելավել որոնման արդյունքները դասակարգման և զտման միջոցով: Եթե ունեք հարցեր, տեղադրեք դրանք ստորև ներկայացված մեկնաբանություններում: