Meilisearch · 11 min read · Oct 26, 2025
Debian 12にMeilisearchをインストールして設定する方法

Meilisearchは、Rust言語で書かれたオープンソースの検索エンジンです。Rustを使用して書かれているため、実行に必要なリソースが少なく、単一のコマンドラインバイナリを使用して実行できます。インストールプロセスは、他の検索エンジンに比べて簡単で、手順も少なくて済みます。特徴には、ファジーマッチングやスキーマレスインデックス作成が含まれています。デモ用のウェブフロントエンドが付属しており、JavaScript、Python、PHP、Rubyなどの複数の言語で利用可能なライブラリを通じて、さまざまなウェブアプリケーションに統合できます。
このチュートリアルでは、Debian 12サーバーにMeilisearchを本番環境でインストールし、いくつかの簡単な検索を実行する方法を学びます。
前提条件
最低2GBのRAMを搭載したDebian 12を実行しているサーバー。
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のインストール
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用のシステムユーザーを作成
rootとしてMeilisearchを実行すると、セキュリティ上の問題が発生する可能性があります。それを避けるために、Meilisearchを実行するためのシステムユーザーを作成します。
$ sudo useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearchステップ4 - Meilisearchの設定
先に進む前に、Meilisearchが認証プロセスに使用するマスターキーを作成する必要があります。OpenSSLコマンドラインユーティリティを使用して作成できます。次のコマンドを実行して、30文字の長さのマスターキーを作成します。マスターキーの長さは任意に選択できます。長いほど良いです。
$ openssl rand -hex 3030文字の長さのキーが出力されるはずです。この値をコピーしてください。次のステップで必要になります。
65ed5fc15848f7ceb8e646d4928fcf79f494cec239a2874cacd118e42611Meilisearchの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の3分の2を超えないようにします。次の変数のコメントを外して設定することで、これを制御できます。正確で正確にするために、値をバイト数として指定することもできます。
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/meilisearchMeilisearchバイナリファイルの所有者とグループを設定します。
$ 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.targetCtrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。
サービスを有効にします。
$ sudo systemctl enable meilisearchMeilisearchサービスを開始します。
$ 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 runtimeMeilisearchがインストールされ、実行中です。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/nullNginxのメインラインバージョンのリポジトリを追加します。
$ 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 updateNginxをインストールします。
$ sudo apt install nginxインストールを確認します。Debianシステムでは、次のコマンドはsudoでのみ機能します。
$ sudo nginx -v
nginx version: nginx/1.25.5Nginxサーバーを開始します。
$ 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をインストールする必要があります。Debianのリポジトリを使用してCertbotをインストールするか、Snapdツールを使用して最新バージョンを取得できます。Snapdバージョンを使用します。
Debian 12にはSnapdがインストールされていません。Snapdパッケージをインストールします。
$ sudo apt install -y snapd次のコマンドを実行して、Snapdのバージョンが最新であることを確認します。
$ sudo snap install core && sudo snap refresh coreCertbotをインストールします。
$ sudo snap install --classic certbot次のコマンドを使用して、Certbotコマンドが/usr/binディレクトリで実行できるようにシンボリックリンクを作成します。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbotCertbotが正しく機能しているか確認します。
$ 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 4096systemdタイマーのリストを確認します。Certbotは自動的に更新目的のためにタイマーをインストールして開始します。
$ sudo systemctl list-timersスケジュールされたサービスの1つとして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.confinclude /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 -tNginxサーバーを再起動します。
$ sudo systemctl restart nginxMeilisearchは現在実行中で、https://meilisearch.example.comのURLを介して利用可能です。このURLを開くと、次のテキストが表示されるはずです。
{"status":"Meilisearch is running"}このURLはコマンドラインを介して検索するためだけに使用できます。フロントエンドを介してMeilisearchにアクセスしたい場合は、別のCMSやソフトウェアと統合する必要があります。このチュートリアルの範囲外です。Meilisearchには、開発目的で使用する場合にのみ機能する組み込みのフロントエンドインターフェースが付属しています。設定ファイルでインスタンスの環境をdevelopmentに変更し、Meilisearchを再起動するとインターフェースが有効になります。次のようになります。

本番環境では、Meilisearchを別のCMSと統合する必要があります。
ドキュメントをインデックス化し、検索に使用する方法を始めましょう。
ステップ10 - Meilisearchにサンプルデータを読み込む
Meilisearchプロジェクトは、The Movie Database (TMDB)からスクレイピングされたデータを含むサンプルのJSON形式の映画ファイルを提供しています。ファイルをダウンロードします。
$ 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 Authorization: Bearer - リクエストにマスターキーを渡します。
- –data-binary - 含めるファイルを指定します。
ここでは、/indexes/movies/documentsの場所に新しいMeilisearchインデックスを作成しています。リクエストがキューに入れられたことを示す出力が表示されるはずです。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フォーマットに役立つツールが1つ必要です。それはjqと呼ばれています。次のコマンドを実行してインストールします。
$ sudo apt install -y jq設定ファイルにマスターキーを追加したにもかかわらず、各リクエストに再度渡す必要があります。先に進む前に、読み取り専用モードを有効にするためのより制限されたキーが必要です。Meilisearchはデフォルトで読み取り専用キーを作成します。それを取得しましょう。
$ 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 keyを使用します。
ステップ12 - サンプルデータを検索
Meilisearchを使用して検索する方法は2つあります。コマンドライン経由で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"]- 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、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を本番環境でインストールして設定する作業が完了しました。また、基本的な検索を実行し、ランキングやフィルタリングを通じて検索結果を改善する方法を学びました。質問がある場合は、下のコメントに投稿してください。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。