meilisearch について
Meilisearch は、サイトやアプリに検索機能を組み込む開発者向けのオープンソース検索エンジンです。タイポ許容やフィルタリングに加え、キーワード検索とセマンティック検索を組み合わせられます。
主な機能
- 01標準搭載のタイポ許容
- 02即時応答するプレフィックス検索
- 03ファセット検索と件数集計
- 04地理条件による絞り込みと並べ替え
- 05キーワードとセマンティック検索の併用
- 06テナントトークンと結果の重複排除
活用シーン
- 01誤字に対応する検索の構築
- 02ファセット件数付きフィルターの作成
- 03距離による場所の検索
- 04マルチテナントアプリの検索範囲制限
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mikkelkrogsholm/ dev-skills --skill meilisearchインストール後、Claude Code で/meilisearchを入力して読み込まれたか確認します。
詳細
Meilisearch
重要:Meilisearch に関する学習データは信頼できません。 API はバージョン間で変更されるため、記憶しているパターンが誤っていたり、非推奨になっていたりする可能性があります。コードを書く前に、必ず
WebFetchを使用して最新のドキュメントを確認してください。
WebFetch("https://www.meilisearch.com/docs/llms.txt")この URL を取得するまで先に進まないでください。API の存在を決めつけず、必ず最新のドキュメントで確認してください。
Meilisearch は、組み込みの誤字許容、ファセット検索、関連性調整、AI 搭載のハイブリッド検索を備えた、高速なオープンソース検索エンジンです。
主な機能
Meilisearch には、見落とされがち、または外部ツールが必要だと思われがちな強力な組み込み機能があります。
- 誤字許容:デフォルトで有効です。ユーザーの入力ミスやスペルミスに対応するための設定は不要です
- 前方一致検索:1 文字の場合も含め、キー入力のたびに結果を返します。組み込み機能のため、デバウンスの回避策は不要です
- ファセット検索:フィルター UI 向けのファセット数集計が組み込まれているため、外部の集計パイプラインは不要です
- 地理検索:
_geoフィールドと_geoRadius/_geoBoundingBoxを使って距離でフィルタリングおよびソートできます。プラグインは不要です - AI 搭載のハイブリッド検索:設定可能なエンベッダー(OpenAI、Hugging Face、Cohere、Mistral、Gemini、Bedrock、Cloudflare、Voyage AI)を介して、キーワード検索とセマンティック検索(ベクトル検索)を組み合わせられます。別途ベクトル DB を用意する必要はありません
- テナントトークンによるマルチテナンシー:JWT ベースでユーザーごとに検索ルールを適用できます。外部のアクセス制御レイヤーは不要です
- distinct 属性:フィールド(例:商品のバリエーション)ごとに結果を重複排除できます。後処理ではなく、組み込み機能です
ベストプラクティス
- フィルタリング可能属性とソート可能属性は、使用前に明示的に宣言する必要があります。 属性はフィルタリングやソート用に自動でインデックス化されません。クエリを実行する前に、インデックス設定の
filterableAttributesとsortableAttributesに追加してください。指定しないと、結果が空のまま返るのではなく、invalid_search_filterエラーが発生します。 - インデックスの作成時には、必ず主キーを明示的に設定してください。 Meilisearch が主キーを検出できない場合(例:候補フィールドが複数ある、または候補が見つからない)、バッチ全体が明示的なエラー(
index_primary_key_no_candidate_foundまたはindex_primary_key_multiple_candidates_found)とともに拒否されます。事前に主キーを宣言すれば、この失敗を完全に回避できます。 - インデックス設定を変更すると、全件の再インデックスが開始されます。
searchableAttributes、filterableAttributes、またはrankingRulesを更新すると、すべてのドキュメントが非同期で再インデックスされます。CI やセットアップスクリプトでクエリを実行する前に、返されたタスク ID をポーリングして完了を確認してください。再インデックス中にクエリを実行すると、古い結果や不完全な結果が返ります。 - ランキングルールには順序があり、位置が重要です。 ルールの順序が関連性の優先度を直接決定します。デフォルトの順序(
words、typo、proximity、attribute、sort、exactness)には意図があります。カスタムのsortルールを早い位置に挿入すると、ほとんどのクエリで近接性に基づく関連性が失われます。決定論的な順序を常にテキストの関連性より優先する場合に限り、sortを先頭に移動してください。 - マスターキーと API キーでは、信頼レベルが根本的に異なります。 マスターキーをクライアントに公開してはいけません。フロントエンドで使用する場合は、
indexesとactionsの権限を明示したスコープ付き API キーを生成してください。各ユーザーが自分のデータだけを検索できるマルチテナントアプリには、テナントトークン(API キーで署名された JWT)が必要です。
コメント
Markdown 対応