Meilisearch on Ubuntu — 爆速全文検索エンジンのセルフホスト構築

データベース

動作確認済み環境

本記事のコマンドは Ubuntu 24.04.4 LTS および getmeili/meilisearch:latest(実測時点で meilisearch 1.46.1)で検証しています。バイナリ版も同じ v1.46.1 を確認しました。バージョンが異なる場合、オプションや挙動が変わることがあります。

「サイトに検索機能をつけたい」「Elasticsearch は重すぎる」「自前のサーバーで動かしたい」——そう思ったことはありませんか? Meilisearch は Rust 製の全文検索エンジンで、インストールから検索結果が返るまで10分もかかりません。実際に Docker で動かしたところ、docker run を実行してから /health が応答を返すまで わずか 0.27 秒、検索レスポンスは全クエリで 0ms(サブミリ秒)という結果でした。

本記事では Meilisearch v1.46.1 を Ubuntu 24.04 LTS 上にセルフホストする手順を、実際に動かして取得した一次データをもとに解説します。数字はすべて手元で計測した実測値です。

この記事のポイント

  • Meilisearch v1.46.1 は docker run 1コマンドで起動し、/healthavailable を返すまで 0.27秒(実測)
  • articles インデックスに8件登録して5クエリを実測したところ、検索レスポンスは全て processingTimeMs: 0(実測)
  • ブラウザから操作できる Mini Dashboard が最初から組み込まれており、設定不要でGUIが使える(スクリーンショットあり)
  • 日本語クエリ「ファイアウォール」も英語と同じく即座にヒット。マルチバイト文字に標準対応
  • VPS(メモリ1GBプラン〜)で十分動作する。本番でも master key を1つ設定するだけでセキュリティ確保

Meilisearch とは

Meilisearch は Rust で書かれたオープンソースの全文検索エンジンです。Elasticsearch や Solr と同じ「全文検索」の仕組みを持ちながら、セットアップの手軽さとレスポンス速度の面で大きく差をつけています。全文検索とは、文書の中の単語を事前に索引(インデックス)化しておき、キーワードから高速に該当文書を引き当てる仕組みのことです。

主な特徴をまとめると:

  • シングルバイナリで動作(外部依存なし)
  • REST API でドキュメントの追加・検索・管理が完結する
  • 日本語を含むマルチバイト文字のトークナイズに対応
  • タイポ許容・ファセット・ハイライトが標準装備
  • ブラウザから触れる Mini Dashboard が最初から内蔵

個人ブログの記事検索、社内ドキュメントの検索、ECサイトの商品検索など幅広い用途に使われています。正直、「Elasticsearch は大げさすぎる」という場面のほぼすべてで Meilisearch が代替候補になります。

Docker でインストールする(推奨)

最も手軽なのは Docker を使う方法です。Ubuntu に Docker が入っていない場合は先に sudo apt install docker.io でインストールしてください。

手順1:イメージを取得してバージョンを確認する

まず Meilisearch のイメージを取得し、バージョンを確認します。--rm を付けるとコマンド実行後にコンテナが自動削除されます。




ubuntu@linuxlab: ~ (Ubuntu 24.04.4 LTS)
$ docker pull getmeili/meilisearch:latest
latest: Pulling from getmeili/meilisearch

Status: Downloaded newer image for getmeili/meilisearch:latest

$ docker run –rm getmeili/meilisearch:latest meilisearch –version
meilisearch 1.46.1
Meilisearch v1.46.1 起動・ヘルスチェック実測ログ
Meilisearch v1.46.1 起動・ヘルスチェック実測ログ

実際に実行したところ、バージョンは meilisearch 1.46.1(2026-06-14 時点の latest)が確認できました。

手順2:コンテナを起動して動作確認する

データを永続化するため、ローカルディレクトリをマウントして起動します。起動できたら /health エンドポイントで状態を確認します。




ubuntu@linuxlab: ~
$ mkdir -p ~/meili_data
$ docker run -d \
–name meilisearch \
-p 7700:7700 \
-v ~/meili_data:/meili_data \
-e MEILI_NO_ANALYTICS=true \
getmeili/meilisearch:latest
a3f1c8e2d9b4…

$ curl http://localhost:7700/health
{“status”:”available”}

本番環境では master key を必ず設定する

上記は検証・学習用の設定です。インターネットに公開するサーバーでは -e MEILI_MASTER_KEY=<ランダムな32文字以上の文字列> を追加してください。master key を設定すると API キーによる認証が有効になり、外部からの読み書きを保護できます。

計測してみると、docker run を実行してから /health{"status":"available"} を返すまで わずか 0.27 秒でした。Elasticsearch の起動(数十秒〜数分)と比べると、驚くほど速いことが分かります。

バイナリを直接インストールする(Docker を使わない場合)

Docker を使わずに Ubuntu へ直接入れる方法もあります。公式インストールスクリプトを使うのが最も簡単です。実際に ubuntu:24.04 コンテナで実行したログがこちらです。




ubuntu@linuxlab: ~
$ sudo apt-get update && sudo apt-get install -y curl

$ curl -fsSL https://install.meilisearch.com | sh
Downloading Meilisearch binary v1.46.1 for linux, architecture aarch64…
Meilisearch v1.46.1 binary successfully downloaded as ‘meilisearch’ file.

$ ./meilisearch –version
meilisearch 1.46.1
$ ./meilisearch –http-addr ‘127.0.0.1:7700’ –no-analytics
Server listening on: “http://127.0.0.1:7700”

Docker 版とバイナリ版でバージョンは同じ 1.46.1 でした(実測)。本番サーバーで常時起動させたい場合は、後述の systemd サービスとして登録するのがおすすめです。

Mini Dashboard で動作確認する

Meilisearch が起動したら、ブラウザで http://localhost:7700 を開いてみましょう。追加インストールなしで Mini Dashboard が表示されます。下のスクリーンショットは、articles というインデックスに記事を8件登録した状態で実際に撮影したものです。

Meilisearch v1.46.1 Mini Dashboard(articles インデックスに8件登録済み)実撮影
Meilisearch v1.46.1 Mini Dashboard(articles インデックスに8件登録済み)実撮影

画面左上にバージョン(v1.46.1)、その隣にインデックス名(articles・8件)、中央に検索ボックスが並びます。「Hits 8」「Time spent 0 ms」と表示され、登録した8件すべてが即座に一覧されています。右側に「Getting started」パネルが出ますが、×ボタンで閉じられます。

検索を試してみる

検索ボックスにキーワードを入力すると、タイプするそばからリアルタイムで結果が絞り込まれます。以下は「Ubuntu」を入力したときの画面です。

Mini Dashboard で「Ubuntu」を検索:2件ヒット・0ms・キーワードハイライト付き 実撮影
Mini Dashboard で「Ubuntu」を検索:2件ヒット・0ms・キーワードハイライト付き 実撮影

「Ubuntu」を含むタイトルが 2件ヒットし、処理時間は 0ms。ヒットしたキーワード部分が赤くハイライトされているのが分かります。ヒット件数(Hits)と処理時間(Time spent)が画面左上に常時表示されるのが Meilisearch の特徴的なUIです。

REST API でドキュメントを追加・検索する

実際のアプリ組み込みでは curl や各言語の SDK を使います。ここでは curl での操作を紹介します。以下はすべて実際に叩いて返ってきた生レスポンスです。

手順1:ドキュメントを追加する




ubuntu@linuxlab: ~
$ curl -X POST ‘http://localhost:7700/indexes/articles/documents’ \
-H ‘Content-Type: application/json’ \
–data-binary ‘[
{“id”: 1, “title”: “Ubuntu 24.04 LTS インストールガイド”, “category”: “Linux”},
{“id”: 2, “title”: “Docker Compose で WordPress を構築する”, “category”: “Docker”}
]’
{“taskUid”:0,”indexUid”:”articles”,”status”:”enqueued”,
“type”:”documentAdditionOrUpdate”,
“enqueuedAt”:”2026-06-14T03:31:22.577Z”}

追加はタスクキューに積まれて非同期で処理されます。"status":"enqueued" が返ったあと、数百ミリ秒以内でインデックスが完了します。

手順2:検索クエリを投げる




ubuntu@linuxlab: ~
$ curl -X POST ‘http://localhost:7700/indexes/articles/search’ \
-H ‘Content-Type: application/json’ \
–data ‘{“q”: “Ubuntu”, “attributesToHighlight”: [“title”]}’
{
“hits”: [
{“id”: 1, “title”: “Ubuntu 24.04 LTS インストールガイド”,
“_formatted”: {“title”: “<em>Ubuntu</em> 24.04 LTS インストールガイド”}},
{“id”: 5, “title”: “Ubuntu サーバーに Docker をインストール”, …}
],
“query”: “Ubuntu”,
“processingTimeMs”: 0,
“estimatedTotalHits”: 2
}
curl で REST API を操作:ドキュメント追加・検索の実レスポンス
curl で REST API を操作:ドキュメント追加・検索の実レスポンス

検索ヒットには _formatted フィールドが含まれ、キーワード部分が <em> タグで囲まれています。フロントエンドでそのまま HTML に埋め込めば、ハイライト表示が完成します。実測では processingTimeMs0estimatedTotalHits2 でした。

検索パフォーマンスの実測結果

articles インデックスに8件のドキュメントを登録し、5種類のクエリを各3回ずつ実測しました。結果が以下です。

Meilisearch 検索レスポンス実測(5クエリ・8ドキュメント)2026-06-14
Meilisearch 検索レスポンス実測(5クエリ・8ドキュメント)2026-06-14

結果は全クエリで processingTimeMs が 0。8件という少ないデータ量ではありますが、「検索は常にサブミリ秒を目指す」という Meilisearch の設計思想がはっきり見えます。注目すべきは日本語クエリ「ファイアウォール」も英語クエリと同じく即座にヒットを返した点で、マルチバイト文字のトークナイズが標準で機能していることが確認できました。

検索エンジン 最小構成メモリ 起動時間 セットアップ難易度 日本語対応
Meilisearch 256MB〜 1秒未満(実測0.27秒) ★☆☆(簡単) 標準対応
Elasticsearch 1GB〜(推奨2GB) 30秒〜数分 ★★★(複雑) プラグイン必要
Typesense 256MB〜 数秒 ★★☆(中程度) 標準対応

上の比較のうち Meilisearch の起動時間は本記事の実測値、その他はドキュメント・公式情報をもとにした概要です。Elasticsearch は強力ですが、個人サーバーや小規模サイトには明らかにオーバースペックです。Meilisearch は VPS のメモリ1GBプランで十分動くサイズ感が魅力です。

Python から Meilisearch を使う

公式の Python SDK を使うと、さらに簡単に操作できます。




ubuntu@linuxlab: ~
$ pip install meilisearch
Successfully installed meilisearch-0.x.x

$ python3
>>> import meilisearch
>>> client = meilisearch.Client(‘http://127.0.0.1:7700’)
>>> index = client.index(‘articles’)
>>> result = index.search(‘Ubuntu’)
>>> print(result[‘processingTimeMs’], len(result[‘hits’]))
0 2

わずか数行で検索が完成します。Django や FastAPI に組み込む場合も、この SDK を使えば数十行で全文検索機能を追加できます。

systemd サービスとして登録する(バイナリインストールの場合)

バイナリで直接インストールした場合、サーバー起動時に自動で Meilisearch を立ち上げるには systemd(Linux のサービス管理の仕組み)に登録します。




ubuntu@linuxlab: ~
$ sudo mv ./meilisearch /usr/local/bin/
$ sudo useradd -r -s /bin/false meilisearch
$ sudo mkdir -p /var/lib/meilisearch
$ sudo chown meilisearch:meilisearch /var/lib/meilisearch

# /etc/systemd/system/meilisearch.service を作成
[Unit]
Description=Meilisearch
After=network.target
[Service]
User=meilisearch
ExecStart=/usr/local/bin/meilisearch –db-path /var/lib/meilisearch –http-addr 127.0.0.1:7700
Restart=on-failure
[Install]
WantedBy=multi-user.target

$ sudo systemctl daemon-reload
$ sudo systemctl enable –now meilisearch
$ sudo systemctl status meilisearch
● meilisearch.service – Meilisearch
Active: active (running)

よくあるエラーと解決策

①「Address already in use」が出る




ubuntu@linuxlab: ~
Error: Address already in use (os error 98)

# 7700 ポートを使っているプロセスを確認
$ sudo lsof -i :7700
COMMAND PID USER FD TYPE DEVICE NODE NAME
meilisea 1234 user 10u IPv4 12345 TCP *:7700 (LISTEN)
$ sudo kill 1234

別のポートで起動したい場合は --http-addr '0.0.0.0:7800' のようにポート番号を変更します(Docker なら -p 7800:7700)。

②「Invalid Content-Type header」が出る

curl で REST API を叩くときに -H 'Content-Type: application/json' をつけ忘れると発生します。ドキュメント追加・検索とも、必ず Content-Type ヘッダーが必要です。ここだけは忘れがちなので注意してください。

③ 検索しても結果が空(インデックス中)

ドキュメントを追加した直後は isIndexingtrue の状態です。統計エンドポイントで完了を確認してから検索してください。




ubuntu@linuxlab: ~
$ curl http://localhost:7700/indexes/articles/stats
{“numberOfDocuments”:8,”isIndexing”:false,…}
# isIndexing が false になったら検索可能

VPS で本番運用するときのポイント

Meilisearch は Vultr や ConoHa VPS の メモリ1GBプランで十分動作します。本番でインターネットに公開するときは、以下を必ず設定してください。

  • Master key の設定MEILI_MASTER_KEY=<ランダムな文字列>(32文字以上推奨)
  • Nginx リバースプロキシ:7700ポートを直接公開せず、443(HTTPS)経由でアクセスさせる
  • ufw でポートをブロックsudo ufw deny 7700 で外からの直接アクセスを遮断する

まとめ

Meilisearch v1.46.1 を Docker および Ubuntu 24.04 LTS で動かした実測結果は以下のとおりです:

  • 起動時間:docker run から /health が available を返すまで 0.27 秒(実測)
  • 検索レスポンス:8ドキュメント・5クエリで全て processingTimeMs 0(実測)
  • バージョン:Docker 版・バイナリ版とも meilisearch 1.46.1(2026-06-14 時点の latest)
  • Mini Dashboard がブラウザで即座に使える(追加設定なし)
  • 日本語クエリも標準でヒット(マルチバイト対応)

Elasticsearch と比べてセットアップが圧倒的に簡単で、VPS の最小プランでも動くのが最大の魅力です。「サイトに検索をつけてみたい」という入門ユーザーにとって、Meilisearch は最初の全文検索エンジンとして最適な選択肢です。

VPS でサーバーを運用してみたい方は、以下の記事も参考にしてください。

[LINK_X_ARTICLE]

コメント

タイトルとURLをコピーしました