如何在 Debian 12 上安装和配置 Meilisearch
Meilisearch 是一个用 Rust 语言编写的开源搜索引擎。 使用 Rust 编写需要更少的资源来运行,并且可以使用单个命令行二进制文件运行。 安装过程比其他搜索引擎更简单,并且需要的步骤更少。 其功能包括模糊匹配和无模式索引。 它带有一个用于演示目的的网络前端。 它可以通过 JavaScript、Python、PHP、Ruby 等多种语言的各种库集成到各种 Web 应用程序中。
在本教程中,您将学习如何在 Debian 12 服务器上安装 Meilisearch 并使用它来执行一些简单的搜索。
先决条件
-
运行 Debian 12 且 RAM 至少为 2GB 的服务器。
-
具有 sudo 权限的非 root 用户。
-
简单的防火墙(UFW)已启用并正在运行。
-
完全合格的域名 (FQDN),例如
meilisearch.example.com
指向您的服务器。 如果您想使用代理服务器通过 SSL 为 Meilisearch 提供服务,这将非常有用。 -
一切都更新了。
$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 步 – 配置防火墙
安装任何软件包之前的第一步是配置防火墙以允许 HTTP 和 HTTPS 连接。
检查防火墙的状态。
$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的方法。 我们将使用最简单的方法,将二进制文件复制到我们的服务器。
安装美丽搜索。
$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 – 为美丽搜索创建系统用户
以 root 身份运行 Meilisearch 可能会产生安全问题。 为了避免它们,请创建一个用于运行Meilisearch的系统用户。
$sudo useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearch
步骤 4 – 配置美丽搜索
在继续之前,我们需要创建 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 的遥测。
no_analytics = true
默认情况下,Meilisearch 使用的系统内存不超过三分之二。 您可以通过取消注释并设置以下变量来控制它。 您还可以将该值指定为精确的字节数,以确保精确和准确。
max_indexing_memory = "1 GiB"
Meilisearch 使用的可用 CPU 核心不超过一半。 但是,您可以通过取消注释并设置以下变量来控制该值。
max_indexing_threads = 1
将此值设置为大于机器的CPU核心数将告诉Meilisearch使用最大可用核心数。
您应该了解的另一项设置是Meilisearch 可以承受的最大有效负载量。 默认值设置为 100MB。 您可以通过配置以下变量来更改它。
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
启动美丽搜索服务。
$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
我们需要安装 Certbot 来生成 SSL 证书。 您可以使用 Debian 的存储库安装 Certbot,也可以使用 Snapd 工具获取最新版本。 我们将使用 Snapd 版本。
Debian 12 并未安装 Snapd。 安装 Snapd 软件包。
$sudo apt install -y snapd
运行以下命令以确保您的 Snapd 版本是最新的。
$sudo snap install core && sudo snap refresh core
安装证书机器人。
$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 protected] -d meilisearch.example.com
上述命令将下载证书到 /etc/letsencrypt/live/meilisearch.example.com
您服务器上的目录。
生成 Diffie-Hellman 组证书。
$sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
检查 systemd 计时器列表。 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 现已运行并可通过 URL 访问 https://meilisearch.example.com
。 打开 URL 时,您应该看到以下文本。
{"status":"Meilisearch is running"}
该 URL 只能用于通过命令行进行搜索。 如果您想通过前端访问Meilisearch,则需要将其与另一个CMS或软件集成,以使其正常工作,这超出了本教程的范围。 Meilisearch 附带一个内置的前端界面,但仅当您将其用于开发目的时才有效。 您可以将实例的环境更改为 development
修改配置文件并重启Meilisearch即可激活界面。 它应该类似于以下内容。
对于生产环境,您需要将Meilisearch 与另一个CMS 集成。
让我们开始使用它来索引一些文档并使用它进行搜索。
第10步 – 在美丽搜索中加载样本数据
Meilisearch项目提供了一个示例 JSON 格式的电影文件,其中包含从电影数据库 (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 格式。
让我们使用curl 通过HTTP POST 请求将数据加载到Meilisearch 中。
$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"}
您还可以通过替换 URL 来运行上述命令 http://localhost:7700
和 https://meilisearch.example.com
它也会以同样的方式工作。 您可以对本教程中的所有命令执行此操作,但为了简单起见,我们将坚持 http://localhost:7700
网址。
运行以下命令来检查请求的状态。
$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 }
从现在开始,我们将使用默认搜索 API 密钥来执行搜索。
第 12 步 – 搜索示例数据
使用美丽搜索有两种方式进行搜索,您可以通过命令行使用 API,也可以使用 Web 界面。 Web 界面相当有限,只有在开发环境中使用 Meilisearch 时才有效,并且建议使用 API 方式使用 Meilisearch。 由于我们已经配置了生产搜索,因此我们将仅使用命令行方法。
通过 API 搜索就像通过 HTTP POST 请求上传数据一样。 您向 /search
API 的端点。 例如,让我们搜索任何带有单词的电影 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 }, ...
测试美丽搜索的模糊匹配功能,可以使用相似的发音词来找到精确的搜索。 如果您输入错误但仍期望得到正确的结果,这会很有帮助。
$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
并且美丽搜索仍然会返回包含该词的条目 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 有一组默认的偏见规则,您可以配置它们来改善搜索结果。
但首先我们需要查看美丽搜索设定的排名规则。
$curl -X GET 'http://localhost:7700/indexes/movies/settings/ranking-rules' -H 'Authorization: Bearer 0f3cdcfe5d9a56273d6c708f068a82382a97b629b70f4962f969687b5e327196'
您将得到以下输出。
["words","typo","proximity","attribute","sort","exactness"]
- 单词 – 结果按匹配术语的数量递减排序。
- 拼写错误 – 结果通过增加拼写错误的数量进行排序。 顶部返回的拼写错误查询较少。
- 邻近度 – 通过增加匹配项之间的距离对结果进行排序。
- 属性 – 结果按属性排名顺序排序。
- 排序 – 根据查询时决定的参数对结果进行排序。
- 精确性 – 结果按匹配词与查询词的相似度排序。
您可以在美丽搜索官方文档中阅读有关相关性的更多信息。
发出以下命令来更改偏置规则顺序。
$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
在旁边。
$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
和 genres
属性将带来更好的结果。
接下来,我们可以将搜索结果格式化为仅显示某些属性,同时隐藏其他属性。
$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 步 – 结论
您已经在 Debian 12 服务器上的生产环境中完成了 Meilisearch 的安装和配置。 您还执行了一些基本搜索,并了解了如何通过排名和过滤来改进搜索结果。 如果您有任何疑问,请在下面的评测中发表。
资讯来源:由a0资讯编译自THECOINREPUBLIC。版权归作者A0资讯所有,未经许可,不得转载