Meilisearch là một công cụ tìm kiếm mã nguồn mở được viết bằng ngôn ngữ Rust. Được viết bằng Rust đòi hỏi ít tài nguyên hơn để chạy và có thể chạy bằng một lệnh nhị phân dòng lệnh duy nhất. Quá trình cài đặt đơn giản hơn các công cụ tìm kiếm thay thế và yêu cầu ít bước hơn. Các tính năng của nó bao gồm khớp mờ và lập chỉ mục không có lược đồ. Nó đi kèm với giao diện web cho mục đích demo. Nó có thể được tích hợp vào nhiều ứng dụng web khác nhau thông qua nhiều thư viện có sẵn bằng nhiều ngôn ngữ như JavaScript, Python, PHP, Ruby, v.v.
Trong hướng dẫn này, bạn sẽ học cách cài đặt Meilisearch trong sản xuất trên máy chủ Debian 12 và sử dụng nó để thực hiện một số tìm kiếm đơn giản.
Kiểm tra trạng thái của tường lửa.
Bạn sẽ thấy nội dung tương tự như sau.
Cho phép các cổng HTTP và HTTPs.
Kiểm tra lại trạng thái để xác nhận.
Cài đặt Meilisearch.
Tạo tệp nhị phân có thể thực thi.
Hiện tại, tệp nhị phân chỉ có thể sử dụng được từ thư mục mà bạn đã tải xuống. Để có thể sử dụng ở bất kỳ đâu, hãy di chuyển tệp nhị phân đến thư mục
Xác nhận rằng Meilisearch đã được cài đặt và đang chạy đúng cách.
Bạn sẽ nhận được kết quả tương tự với khóa dài 30 ký tự. Sao chép giá trị này vì chúng ta sẽ cần nó trong các bước tiếp theo.
Lấy tệp cấu hình mới nhất từ kho lưu trữ GitHub của Meilisearch và sao chép vào
Mở để chỉnh sửa.
Cập nhật các dòng sau trong tệp để cấu hình đường dẫn cơ sở dữ liệu, đường dẫn dump, thư mục ảnh chụp nhanh và môi trường làm việc, đồng thời thêm khóa chính mà bạn đã tạo trước đó để xác thực.
Các giá trị được cập nhật trong tệp cấu hình sẽ trông giống như sau.
Meilisearch thu thập dữ liệu thường xuyên một cách ẩn danh. Bạn nên tắt nó bằng tùy chọn sau. Bỏ ghi chú để hủy kích hoạt phép đo từ xa của Meilisearch.
Theo mặc định, Meilisearch sử dụng không quá hai phần ba RAM khả dụng trên hệ thống của bạn. Bạn có thể kiểm soát điều này bằng cách bỏ ghi chú và đặt biến sau. Bạn cũng có thể chỉ định giá trị là số byte chính xác để đảm bảo độ chính xác và chính xác.
Meilisearch chỉ sử dụng không quá một nửa số lõi CPU khả dụng. Tuy nhiên, bạn có thể kiểm soát giá trị này bằng cách bỏ chú thích và thiết lập biến sau.
Thiết lập giá trị này lớn hơn số lõi CPU của máy sẽ yêu cầu Meilisearch sử dụng số lõi khả dụng tối đa.
Một thiết lập nữa mà bạn nên biết là lượng tải trọng tối đa mà Meilisearch có thể tiếp nhận. Giá trị mặc định được đặt ở mức 100MB. Bạn có thể thay đổi bằng cách cấu hình biến sau.
Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Đặt chủ sở hữu và nhóm trên các thư mục này thành người dùng hệ thống mà chúng tôi đã tạo cho Meilisearch.
Đặt chủ sở hữu và nhóm trên nhị phân Meilisearch file.
Thiết lập quyền thích hợp cho thư mục.
Tạo và mở
Dán mã sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Kích hoạt dịch vụ.
Khởi động Meilisearch dịch vụ.
Kiểm tra trạng thái dịch vụ
Bạn sẽ nhận được kết quả tương tự.
Meilisearch đã được cài đặt và đang chạy. Chúng ta hãy đưa dịch vụ ra bên ngoài bằng cách sử dụng máy chủ Nginx làm proxy ngược và sử dụng Let's Encrypt để phục vụ dịch vụ này qua SSL.
Nhập khóa ký của Nginx.
Thêm kho lưu trữ cho phiên bản chính của Nginx.
Cập nhật hệ thống kho lưu trữ.
Cài đặt Nginx.
Xác minh cài đặt. Trên hệ thống Debian, lệnh sau chỉ hoạt động với
Khởi động Nginx máy chủ.
Kiểm tra trạng thái dịch vụ.
Debian 12 không đi kèm Snapd đã cài đặt. Cài đặt gói Snapd.
Chạy các lệnh sau để đảm bảo phiên bản Snapd của bạn được cập nhật.
Cài đặt Certbot.
Sử dụng lệnh sau để đảm bảo lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến
Kiểm tra xem Certbot có hoạt động bình thường không.
Chạy lệnh sau để tạo SSL Giấy chứng nhận.
Lệnh trên sẽ tải xuống chứng chỉ vào thư mục
Tạo chứng chỉ nhóm Diffie-Hellman.
Kiểm tra danh sách bộ đếm thời gian systemd. Certbot tự động cài đặt và bắt đầu bộ đếm thời gian cho mục đích gia hạn.
Bạn sẽ thấy
Thực hiện chạy thử quy trình để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không.
Nếu không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.
Thêm dòng sau vào trước dòng
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tạo và mở tệp
Dán mã sau vào đó. Thay thế
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Xác minh Nginx của bạn cấu hình.
Khởi động lại máy chủ Nginx.
Meilisearch hiện đang chạy và có sẵn thông qua URL
URL này chỉ có thể được sử dụng để tìm kiếm thông qua dòng lệnh. Nếu bạn muốn truy cập Meilisearch thông qua giao diện người dùng, bạn sẽ cần tích hợp nó với một CMS hoặc phần mềm khác để làm cho nó hoạt động, phạm vi của nó nằm ngoài hướng dẫn này. Meilisearch được tích hợp sẵn giao diện frontend nhưng giao diện này chỉ hoạt động nếu bạn sử dụng cho mục đích phát triển. Bạn có thể thay đổi môi trường của phiên bản thành
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22371%22%3E%3C/svg%3E
Đối với môi trường sản xuất, bạn sẽ cần tích hợp Meilisearch với một CMS khác.
Chúng ta hãy bắt đầu sử dụng nó để lập chỉ mục một số tài liệu và sử dụng nó để tìm kiếm.
Bạn có thể chạy lệnh tail để xem một phần dữ liệu. Nó sẽ trông như sau.
Như bạn thấy, mỗi mục riêng lẻ đều chứa id, tiêu đề, liên kết đến hình ảnh áp phích, tổng quan về bộ phim, ngày phát hành và danh sách thể loại. Ngày phát hành ở định dạng EPOCH.
Chúng ta hãy tải dữ liệu vào Meilisearch bằng curl thông qua yêu cầu HTTP POST.
Chúng ta hãy xem qua các đối số lệnh:
Bạn cũng có thể chạy lệnh trên bằng cách thay thế URL
Chạy lệnh sau để kiểm tra trạng thái của yêu cầu.
Bạn sẽ nhận được thông báo tương tự đầu ra.
Điều này cho chúng ta biết rằng nhiệm vụ đã hoàn thành và cơ sở dữ liệu phim hiện đã được lập chỉ mục đầy đủ và sẵn sàng để sử dụng.
Mặc dù chúng tôi đã thêm khóa chính vào tệp cấu hình, bạn sẽ cần phải truyền lại khóa đó với mỗi yêu cầu. Trước khi tiếp tục, chúng tôi cần một khóa hạn chế hơn sẽ kích hoạt chế độ chỉ đọc. Meiliserch tạo một khóa chỉ đọc mặc định theo mặc định. Chúng ta hãy nắm bắt nó.
Bạn sẽ thấy kết quả tương tự.
Từ bây giờ, chúng ta sẽ sử dụng Khóa API tìm kiếm mặc định để thực hiện tìm kiếm.
Tìm kiếm qua API giống như tải dữ liệu lên qua yêu cầu HTTP POST. Bạn gửi yêu cầu đến điểm cuối
Bạn sẽ nhận được kết quả đầu ra được định dạng theo JSON như sau sau đây.
Để kiểm tra tính năng khớp mờ của Meilisearch trong đó các từ có âm thanh tương tự có thể được sử dụng để tìm kiếm chính xác. Điều này hữu ích trong trường hợp bạn đánh máy sai và vẫn mong đợi kết quả đúng.
Ở đây, chúng tôi đã viết sai chính tả
Nhưng trước tiên, chúng ta cần kiểm tra các quy tắc xếp hạng do Meilisearch đặt ra.
Bạn sẽ nhận được kết quả sau.
Phát hành lệnh sau để thay đổi thứ tự quy tắc độ lệch.
Bây giờ chúng ta hãy lọc kết quả tìm kiếm. Đầu tiên, chúng ta hãy yêu cầu Meilisearch chỉ sử dụng một số thuộc tính nhất định để thực hiện tìm kiếm và bỏ qua các thuộc tính vô nghĩa như
Ở đây, chúng ta chỉ thực hiện tìm kiếm bằng cách sử dụng
Tiếp theo, chúng ta có thể định dạng kết quả tìm kiếm để chỉ hiển thị một số thuộc tính nhất định trong khi ẩn các thuộc tính khác.
Điều này sẽ chỉ hiển thị các thuộc tính mà chúng tôi đã đưa vào truy vấn của mình cùng với kết quả.
Cuối cùng, bạn cũng có thể cung cấp danh sách các thuộc tính cần lọc hoặc sắp xếp. Điều này bao gồm cả lọc định lượng bằng các toán tử toán học như < hoặc > và lọc thông qua việc đưa vào một tập hợp đã chỉ định. Đây cũng được gọi là tìm kiếm theo mặt.
Chúng ta có thể kết hợp tất cả các quy tắc này để thực hiện truy vấn như sau.
Ở đây chúng ta đang tìm kiếm tất cả các bộ phim thuộc thể loại Kinh dị từ phim mới nhất đến phim cũ nhất có chứa từ
Trong hướng dẫn này, bạn sẽ học cách cài đặt Meilisearch trong sản xuất trên máy chủ Debian 12 và sử dụng nó để thực hiện một số tìm kiếm đơn giản.
Điều kiện tiên quyết
-
Một máy chủ chạy Debian 12 với tối thiểu 2GB RAM.
-
Một người dùng không phải root có quyền sudo.
-
Tường lửa đơn giản (UFW) được bật và đang chạy.
-
Một Tên miền đủ điều kiện (FQDN) nhưmeilisearch.example.com
trỏ đến máy chủ của bạn. Điều này có lợi nếu bạn muốn phục vụ Meilisearch qua SSL bằng máy chủ proxy.
-
Mọi thứ đều được cập nhật.
Mã:
$ sudo apt update && sudo apt upgrade
-
Một số gói thiết yếu là bắt buộc cho hướng dẫn. Một số trong số này có thể đã được cài đặt trên máy chủ của bạn.
Mã:$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
Bước 1 - Cấu hình Tường lửa
Bước đầu tiên trước khi cài đặt bất kỳ gói nào là cấu hình tường lửa để cho phép kết nối HTTP và HTTPS.Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Mã:
$ 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)
Bước 2 - Cài đặt Meilisearch
Có một số cách để cài đặt Meilisearch. Chúng tôi sẽ sử dụng phương pháp đơn giản nhất liên quan đến việc sao chép tệp nhị phân vào máy chủ của chúng tôi.Cài đặt Meilisearch.
Mã:
$ curl -L https://install.meilisearch.com | sh
Mã:
$ chmod +x meilisearch
/usr/local/bin
.
Mã:
$ sudo mv ./meilisearch /usr/local/bin/
Mã:
$ meilisearch --version
meilisearch 1.7.6
Bước 3 - Tạo người dùng hệ thống cho Meilisearch
Chạy Meilisearch với tư cách root có thể gây ra các vấn đề về bảo mật. Để tránh chúng, hãy tạo một người dùng hệ thống để chạy Meilisearch.
Mã:
$ sudo useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearch
Bước 4 - Cấu hình Meilisearch
Trước khi tiếp tục, chúng ta cần tạo một khóa chính mà Meilisearch sử dụng cho quy trình xác thực. Bạn có thể sử dụng tiện ích dòng lệnh OpenSSL để tạo khóa chính. Chạy lệnh sau để tạo khóa chính dài 30 ký tự. Bạn có thể chọn bất kỳ độ dài nào cho khóa chính của mình. Càng dài càng tốt.
Mã:
$ openssl rand -hex 30
Mã:
65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611
/etc
thư mục.
Mã:
$ sudo sh -c 'curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml'
Mã:
$ sudo nano /etc/meilisearch.toml
Các giá trị được cập nhật trong tệp cấu hình sẽ trông giống như sau.
Mã:
env = "production"
master_key = "173e95f077590ed33dad89247247be8d8ce8b6722ccc87829aaefe3207be"
db_path = "/var/lib/meilisearch/data"
dump_dir = "/var/lib/meilisearch/dumps"
snapshot_dir = "/var/lib/meilisearch/snapshots"
Mã:
no_analytics = true
Mã:
max_indexing_memory = "1 GiB"
Mã:
max_indexing_threads = 1
Một thiết lập nữa mà bạn nên biết là lượng tải trọng tối đa mà Meilisearch có thể tiếp nhận. Giá trị mặc định được đặt ở mức 100MB. Bạn có thể thay đổi bằng cách cấu hình biến sau.
Mã:
http_payload_size_limit = "100 MB"
Bước 5 - Tạo thư mục và cấp quyền
Tạo các thư mục mà Meilisearch sẽ lưu trữ cơ sở dữ liệu, bản sao lưu cơ sở dữ liệu và ảnh chụp nhanh.
Mã:
$ sudo mkdir /var/lib/meilisearch/dumps -p
$ sudo mkdir /var/lib/meilisearch/snapshots
Mã:
$ sudo chown -R meilisearch:meilisearch /var/lib/meilisearch
Mã:
$ sudo chown meilisearch:meilisearch /usr/local/bin/meilisearch
Mã:
$ sudo chmod 750 /var/lib/meilisearch
Bước 6 - Chạy Meilisearch dưới dạng dịch vụ
Để Meilisearch luôn sẵn sàng cho các yêu cầu tìm kiếm, tốt hơn là chạy nó dưới dạng dịch vụ hệ thống. Để thực hiện việc này, chúng ta cần tạo một tệp dịch vụ cho nó.Tạo và mở
/etc/systemd/system/meilisearch.service
để chỉnh sửa.
Mã:
$ sudo nano /etc/systemd/system/meilisearch.service
Mã:
[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
Kích hoạt dịch vụ.
Mã:
$ sudo systemctl enable meilisearch
Mã:
$ sudo systemctl start meilisearch
Mã:
$ sudo systemctl status meilisearch
Mã:
? 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
Bước 7 - Cài đặt Nginx
Debian 12 đi kèm với phiên bản Nginx cũ hơn. Bạn cần tải xuống kho lưu trữ Nginx chính thức để cài đặt phiên bản mới nhất.Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Mã:
$ 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
Mã:
$ sudo apt update
Mã:
$ sudo apt install nginx
sudo
.
Mã:
$ sudo nginx -v
nginx version: nginx/1.25.5
Mã:
$ sudo systemctl start nginx
Mã:
$ 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.
Bước 8 - Cài đặt SSL
Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Debian hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng tôi sẽ sử dụng phiên bản Snapd.Debian 12 không đi kèm Snapd đã cài đặt. Cài đặt gói Snapd.
Mã:
$ sudo apt install -y snapd
Mã:
$ sudo snap install core && sudo snap refresh core
Mã:
$ sudo snap install --classic certbot
/usr/bin
thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Mã:
$ certbot --version
certbot 2.10.0
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d meilisearch.example.com
/etc/letsencrypt/live/meilisearch.example.com
trên máy chủ của bạn.Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Mã:
$ sudo systemctl list-timers
snap.certbot.renew.service
là một trong những dịch vụ được lên lịch chạy.
Mã:
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
Mã:
$ sudo certbot renew --dry-run
Bước 9 - Cấu hình Nginx
Mở tệp/etc/nginx/nginx.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
.
Mã:
server_names_hash_bucket_size 64;
Tạo và mở tệp
/etc/nginx/conf.d/meilisearch.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/meilisearch.conf
meilisearch.example.com
bằng tên miền của bạn.
Mã:
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;
}
Xác minh Nginx của bạn cấu hình.
Mã:
$ sudo nginx -t
Mã:
$ sudo systemctl restart nginx
https://meilisearch.example.com
. Bạn sẽ thấy văn bản sau khi mở URL.
Mã:
{"status":"Meilisearch is running"}
development
trong tệp cấu hình và khởi động lại Meilisearch để kích hoạt giao diện. Nó sẽ trông giống như sau.data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22371%22%3E%3C/svg%3E
Đối với môi trường sản xuất, bạn sẽ cần tích hợp Meilisearch với một CMS khác.
Chúng ta hãy bắt đầu sử dụng nó để lập chỉ mục một số tài liệu và sử dụng nó để tìm kiếm.
Bước 10 - Tải dữ liệu mẫu vào Meilisearch
Dự án Meilisearch cung cấp một tệp phim định dạng JSON mẫu với dữ liệu được trích xuất từ Cơ sở dữ liệu phim (TMDB). Tải tệp xuống.
Mã:
$ wget https://www.meilisearch.com/movies.json
Mã:
$ 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}
]
Chúng ta hãy tải dữ liệu vào Meilisearch bằng curl thông qua yêu cầu HTTP POST.
Mã:
$ curl \ -X POST 'http://localhost:7700/indexes/movies/documents' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' \ --data-binary @movies.json
- -X POST - chỉ định rằng chúng ta đang thực hiện yêu cầu HTTP POST và gửi dữ liệu.
- -H Content-Type - chỉ định loại nội dung tệp.
- -H Authorization: Bearer - là truyền khóa chính cùng với các yêu cầu của bạn.
- --data-binary - chỉ định tệp sẽ được đưa vào.
/indexes/movies/documents
. Bạn sẽ nhận được thông báo tương tự cho biết yêu cầu đã được xếp hàng. Meilisearch xử lý tất cả các yêu cầu theo cách không đồng bộ.
Mã:
{"taskUid":0,"indexUid":"movies","status":"enqueued","type":"documentAdditionOrUpdate","enqueuedAt":"2024-05-03T03:12:55.599798591Z"}
http://localhost:7700
bằng https://meilisearch.example.com
và nó sẽ hoạt động theo cách tương tự. Bạn có thể làm như vậy đối với tất cả các lệnh trong hướng dẫn này nhưng để đơn giản, chúng tôi sẽ sử dụng URL http://localhost:7700
.Chạy lệnh sau để kiểm tra trạng thái của yêu cầu.
Mã:
$ curl -X GET 'http://localhost:7700/indexes/movies/tasks/0'
Mã:
{"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"}
Bước 11 - Sử dụng Khóa giới hạn để Tìm kiếm
Chúng ta cần một công cụ giúp định dạng JSON dòng lệnh dễ đọc. Nó được gọi làjq
. Chạy lệnh sau để cài đặt nó.
Mã:
$ sudo apt install -y jq
Mã:
$ curl -X GET 'http://localhost:7700/keys' -H 'Authorization: Bearer 65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611' | jq
Mã:
{ "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
}
Bước 12 - Tìm kiếm qua Dữ liệu mẫu
Có hai cách để tìm kiếm bằng Meilisearch, bạn có thể sử dụng API thông qua dòng lệnh hoặc sử dụng giao diện web. Giao diện web khá hạn chế và chỉ hoạt động nếu bạn sử dụng Meilisearch trong môi trường phát triển và API là cách được khuyến nghị để sử dụng Meilisearch. Vì chúng tôi đã cấu hình tìm kiếm cho sản xuất, chúng tôi sẽ chỉ sử dụng phương pháp dòng lệnh.Tìm kiếm qua API giống như tải dữ liệu lên qua yêu cầu HTTP POST. Bạn gửi yêu cầu đến điểm cuối
/search
của API. Ví dụ, hãy tìm kiếm bất kỳ bộ phim nào có chứa từ saint
.
Mã:
$ curl \ -X POST 'http://localhost:7700/indexes/movies/search' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \ --data-binary '{ "q": "saint" }' | jq
Mã:
{ "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 }, ...
Mã:
$ curl \ -X POST 'http://localhost:7700/indexes/movies/search' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer 591e51d2f6700ead7ba134a7aed0966d72e2022e43847caf48df3e4800c9279a' \ --data-binary '{ "q": "seint" }' | jq
saint
thành seint
và Meilisearch vẫn sẽ trả về các mục có từ saint
.
Mã:
{ "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 }, …
Bước 13 - Điều chỉnh thứ hạng tìm kiếm và lọc dữ liệu
Các công cụ tìm kiếm có thể trả về kết quả tốt hơn nếu chúng biết cách xếp hạng hoặc coi trọng một số kết quả nhất định dựa trên tầm quan trọng của một lĩnh vực cụ thể. Meilisearch có một bộ quy tắc thiên vị mặc định mà bạn có thể cấu hình để cải thiện kết quả tìm kiếm của mình.Nhưng trước tiên, chúng ta cần kiểm tra các quy tắc xếp hạng do Meilisearch đặt ra.
Mã:
$ curl -X GET 'http://localhost:7700/indexes/movies/settings/ranking-rules' -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196'
Mã:
["words","typo","proximity","attribute","sort","exactness"]
- từ - kết quả được sắp xếp theo số lượng từ khớp giảm dần terms.
- typo - kết quả được sắp xếp theo cách tăng số lỗi đánh máy. Ít truy vấn lỗi đánh máy được trả về ở đầu.
- proximity - kết quả được sắp xếp theo cách tăng khoảng cách giữa các thuật ngữ khớp.
- attribute - kết quả được sắp xếp theo thứ hạng thuộc tính.
- sort - kết quả được sắp xếp theo các tham số được quyết định tại thời điểm truy vấn.
- exactness - kết quả được sắp xếp theo mức độ tương tự của các từ khớp với các từ truy vấn.
Phát hành lệnh sau để thay đổi thứ tự quy tắc độ lệch.
Mã:
$ 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" ]'
id
.
Mã:
$ 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
và genres
các thuộc tính sẽ mang lại kết quả tốt hơn.Tiếp theo, chúng ta có thể định dạng kết quả tìm kiếm để chỉ hiển thị một số thuộc tính nhất định trong khi ẩn các thuộc tính khác.
Mã:
$ 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" ]'
Cuối cùng, bạn cũng có thể cung cấp danh sách các thuộc tính cần lọc hoặc sắp xếp. Điều này bao gồm cả lọc định lượng bằng các toán tử toán học như < hoặc > và lọc thông qua việc đưa vào một tập hợp đã chỉ định. Đây cũng được gọi là tìm kiếm theo mặt.
Mã:
$ 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" ] }'
Mã:
$ 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
trong tiêu đề. Bạn sẽ nhận được kết quả tương tự.
Mã:
{ "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 },
…