Qdrantとは?Docker・Pythonでの使い方や料金をわかりやすく解説

- Qdrantは、文章などの特徴を数値で保存し、似た内容を探せる検索基盤
- 手元のパソコンでの試用と、運用を任せられるクラウドの両方に対応
- 意味とキーワードの両方で検索し、生成AIに渡す資料の選び方を改善
Qdrantは、文章や画像をベクトルと呼ばれる数値データに変換し、そのベクトルを保存・検索するデータベースです。ソースコードが公開されたオープンソースで、社内検索や、資料を生成AIの回答に生かすRAG(検索拡張生成)に利用できます。

とはいえ、「無料で使える?」「導入は難しい?」と疑問を持つ方も多いのではないでしょうか?本記事では、Qdrantの特徴・料金・DockerとPythonでの使い方を解説します。
最後まで読むことで、Qdrantの導入からRAGへの活用まで理解できるようになります。ぜひご覧ください。
\生成AIを活用して業務プロセスを自動化/
Qdrantとは
Qdrantは、ベクトルの類似度を基に情報を探すデータベースです。ベクトルはデータの特徴を表す数値の並びで、文章や画像から作る処理を「埋め込み」と呼びます。この変換を行うAIの仕組みが「埋め込みモデル」です。
Qdrantはプログラミング言語Rustで開発されており、大量のベクトルでも効率よく検索できる設計です。※1
例えば「出張費を精算したい」という質問から、「旅費の申請手順」の文書を探すといった使い方です。ただし、意味が近い情報を見つけられるかは埋め込みモデルにも左右されます。Qdrantの主な役割は保存と検索であり、回答文を作る生成AIとは役割が異なる点を押さえておきましょう。
ベクトル検索の仕組みやFAISSを使った実装も確認したい方は、以下の記事をご覧ください。

Qdrantを使うメリット

Qdrantのメリットは、セルフホストとクラウドから運用形態を選びつつ、条件付きの類似検索を構築できる点です。自社のサーバーで運用するセルフホストでは、Apache License 2.0という利用許諾条件の下で、ソフトウェアを無料で利用できます。※1
部署・作成日などの付加情報で対象を絞るフィルタリングにも対応しています。規程集から人事部の文書だけを検索するといった使い方が可能です。
さらに、データを複数のサーバーへ分散したり、複製を保持したりする構成も選べます。ただし、セルフホストではサーバー代や保守作業が必要なため、運用の手間も含めて判断しましょう。※2
他の主要ベクトルデータベース(FAISS・Pinecone)との違い
Qdrant・FAISS・Pineconeは、検索機能だけでなく、誰が保存や運用を担うかで比較すると選びやすくなります。FAISSは類似検索用のライブラリ(プログラムに組み込む部品)で、Qdrantのようなベクトルデータベースとは性格が異なります。※3
| 比較項目 | Qdrant | FAISS | Pinecone |
|---|---|---|---|
| 提供形態 | オープンソースのデータベース・クラウド | オープンソースの検索ライブラリ | 運用管理を含むクラウドサービス |
| 自社環境での利用 | セルフホストに対応 | アプリに組み込んで利用 | 自社クラウド内に配置するBYOCにも対応(Enterprise) |
| 管理の範囲 | セルフホストは自社、Cloudは事業者が基盤を管理 | 保存・更新・配信の仕組みを別途設計 | 事業者が基盤を管理 |
| 料金体系 | ソフトウェアは無料、Cloudは無料枠・有料プラン | ライブラリは無料、実行環境は別途必要 | 無料枠・定額・従量課金のプラン |
| 主な検索機能 | ベクトル検索・条件絞り込み・ハイブリッド検索 | ベクトルの類似検索 | ベクトル検索・全文検索 |
BYOCは、事業者が管理するサービスを自社のクラウド環境で動かす方式です。PineconeでもEnterpriseプラン向けに提供されているため、「Pineconeは自社環境で使えない」とは言い切れません。※4
既存アプリに検索処理を組み込むならFAISS、保存や条件絞り込みまでまとめて扱うならQdrantが候補になります。運用管理を任せたい場合は、Qdrant CloudとPineconeを同じデータ量・条件で比較しましょう。※1※3※5
Pineconeの仕組みや料金、RAGでの使い方を詳しく知りたい方は、以下の記事もあわせてご覧ください。

Qdrantを導入する方法
Qdrantを手元で試す際は、Dockerで起動し、Pythonから接続する方法がわかりやすいでしょう。Dockerは、ソフトウェアと実行環境を「コンテナ」という単位で動かすためのツールです。
以下はQdrant 1.19.1を使うローカル検証用の手順です。Docker単体とDocker Composeは代替の起動方法なので、どちらか一方を選びましょう。※6
Dockerでのインストール手順
Dockerをインストールして起動したら、ターミナル(コマンドを入力する画面)で次のコマンドを実行します。コンテナを作り直してもデータを残せるよう、名前付きボリュームというDocker管理の保存領域を使う構成です。※7
docker volume create qdrant_data
docker run -d --name qdrant-demo -p 127.0.0.1:6333:6333 -v qdrant_data:/qdrant/storage qdrant/qdrant:v1.19.1docker psを実行し、STATUSがUpであることを確認します。

起動後は、ブラウザーでhttp://localhost:6333/dashboardを開くと管理画面を確認できます。

localhostは操作中のパソコン自身を指し、6333は接続先を区別するポート番号です。
Qdrantは初期設定では認証が有効ではありません。この例では接続先を手元のパソコンに限定していますが、共有環境や本番では認証・通信の暗号化・接続制限を設定してください。※7
Docker Composeでの環境構築
Docker Composeは、起動条件をファイルに保存して管理するツールです。作業フォルダーにdocker-compose.ymlを作り、以下の設定を記載します。※8
services:
qdrant:
image: qdrant/qdrant:v1.19.1
ports:
- "127.0.0.1:6333:6333"
volumes:
- qdrant_data:/qdrant/storage
restart: unless-stopped
volumes:
qdrant_data:ファイルを保存したフォルダーで、次のコマンドを実行してください。-dは、ターミナルを占有せずにバックグラウンドで動かす指定です。先のdocker runで起動済みなら、docker stop qdrant-demoで停止し、同じポートの競合を避けましょう。
docker compose up -dこちらもdocker compose psを実行し、STATUSがUpになっていれば起動完了です。

Composeのボリュームには通常、作業フォルダー名などが付くため、先の手順とは保存先が別になります。通常のdocker compose downではボリュームは残りますが、-vを付けると削除対象になります。データを残したい場合は、この違いに注意しましょう。※9
Windows環境で導入する際の注意点
Windowsでは、Docker DesktopのWSL 2エンジンを使う構成がおすすめです。WSL 2は、Windows上でLinux環境を動かす仕組みです。※10
Docker Desktopの設定でWSL 2エンジンを有効にし、Linuxコンテナを動かせる状態にします。パソコンの仮想化機能や対応OSなど、Docker Desktopの動作要件も事前に確認しましょう。
前述のdocker runは1行で記載しているため、PowerShellでもそのまま入力できます。Windows側のフォルダーを直接共有する代わりに名前付きボリュームを使うと、パス表記の違いも避けやすいでしょう。※7
Qdrant Cloudの料金プラン
Qdrant Cloudは、サーバーの運用管理を任せて利用するサービスです。2026年10月時点の公式料金ページでは、Free Tier・Standard Tier・Premium Tierが案内されています。※11
| プラン | 料金の考え方 | 主な対象・条件 |
|---|---|---|
| Free Tier | 無料 | 試作・検証向け。単一ノード、0.5vCPU・メモリー1GB・ディスク4GB |
| Standard Tier | リソース使用量に基づく従量課金 | 本番運用向け。専用リソース、拡張、バックアップなど |
| Premium Tier | 最低利用額の条件あり。詳細は問い合わせ | 追加のセキュリティー要件や手厚いサポートが必要な企業向け |
※ Free Tierは1週間非アクティブで停止し、4週間再開しない場合は削除されます(2026年10月時点)
ノードは処理を担うサーバーの単位、vCPUは仮想CPUの処理資源を表します。有料プランの費用は構成で変わるため、一律の月額として見積もらず、公式の料金計算ツールで確認してください。
埋め込みや回答生成に外部サービスを使う場合は、その費用も別途見込みましょう。自社環境向けにはHybrid Cloud・Private Cloudも案内されています。※11
PythonでQdrantを操作する方法
Pythonでは、接続・データ登録・検索の順に操作を確認します。ここではPython 3.11以上の環境で、Pythonクライアントのqdrant-client 1.19.0を使用します。※12
まずは3つの数値だけで作った簡単なベクトルで、動きを確かめてみましょう。この基本例では、文章からベクトルを作る埋め込みモデルは使用しません。
Pythonクライアントのインストール
Qdrantの公式Pythonクライアントは、PythonからQdrantを操作するためのライブラリです。ここではWindowsのPowerShellを使い、作業用フォルダーと仮想環境を作ってからインストールします。仮想環境は、この作業で使うライブラリを他のPythonの作業と分けて管理する仕組みです。※12
mkdir "$HOME\Documents\qdrant-python-demo"
cd "$HOME\Documents\qdrant-python-demo"
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install "qdrant-client==1.19.0"続いて、同じフォルダーにqdrant_demo.pyを作り、次のコードを記載します。後述する「登録」「検索」のコードも、このファイルに順番に追記してください。すべて記載してから、「類似検索(検索クエリ)の実行方法」に示すコマンドで実行します。
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333")Qdrant Cloudへ接続する場合は、urlを発行された接続先に変更し、api_keyにAPIキーを渡します。APIはプログラム同士が情報をやり取りする窓口で、APIキーは接続を認証する秘密情報です。
APIキーは環境変数(プログラムの外側から読み込む設定値)などで管理し、公開するコードに直接書き込まないでください。接続先とキーは、Cloudの管理画面で取得します。※13
コレクションの作成とベクトルデータの登録
Qdrantでは、データをまとめる「コレクション」を作ってから登録します。1件のデータはポイントと呼ばれ、ID・ベクトル・ペイロード(本文や部署などの付加情報)を保持する単位です。※14
以下は3次元、つまり3個の数値を持つベクトルを登録する例です。COSINEはベクトルの向きの近さを比較する方式で、upsertは同じIDがあれば更新し、なければ追加する操作を意味します。※15
collection = "weel_qdrant_demo"
if not client.collection_exists(collection):
client.create_collection(
collection_name=collection,
vectors_config=models.VectorParams(
size=3, distance=models.Distance.COSINE
),
)
client.upsert(
collection_name=collection,
wait=True,
points=[
models.PointStruct(
id=1, vector=[1.0, 0.0, 0.0],
payload={"text": "有給休暇の申請手順", "department": "人事"},
),
models.PointStruct(
id=2, vector=[0.8, 0.2, 0.0],
payload={"text": "在宅勤務の申請手順", "department": "人事"},
),
models.PointStruct(
id=3, vector=[0.0, 0.0, 1.0],
payload={"text": "パスワードの変更手順", "department": "情報システム"},
),
],
)この数値は操作説明用の仮データであり、実際の文章の意味を測定したものではありません。実際の文書検索では、埋め込みモデルの出力次元にコレクションの設定を合わせてください。
類似検索(検索クエリ)の実行方法
類似検索に使うのは、query_pointsです。検索クエリとは検索時に与える入力で、以下ではベクトルを渡し、人事の文書だけを取得する条件を指定します。※16
result = client.query_points(
collection_name=collection,
query=[1.0, 0.0, 0.0],
query_filter=models.Filter(
must=[
models.FieldCondition(
key="department",
match=models.MatchValue(value="人事"),
)
]
),
with_payload=True,
limit=2,
)
for point in result.points:
print(point.id, round(point.score, 3), point.payload["text"])
.\.venv\Scripts\python.exe qdrant_demo.py
この設定では、IDが1、2の順に表示され、スコアはそれぞれ約1.0、0.97です。with_payload=Trueは付加情報も返す指定で、部署による絞り込みが不要ならquery_filterの指定を外してください。
Qdrant 1.19では従来の/searchなどの検索APIがAPI仕様書から外され、Pythonクライアントのsearchメソッドも非推奨となりました。そのため、本記事ではQuery APIに対応するclient.query_pointsを使用しています。文書数が増えたら、絞り込み対象の項目にペイロードインデックスという検索用の索引を作ると、処理の効率化を図れます。※12※16
Qdrantでハイブリッド検索を実装する方法

Qdrantでは、意味に基づく検索と単語に基づく検索を組み合わせるハイブリッド検索を実装できます。自然な言い回しの質問と、製品番号などの特定の語句を含む質問の両方を扱いたい場合に検討する方法です。
仕組みを確認してから、2種類の検索結果を統合するコードを見ていきましょう。※17
ハイブリッド検索とは
ハイブリッド検索は、意味の近さと単語の一致を互いに補う検索方法です。意味を数値で表す密ベクトルに対し、疎ベクトル(スパースベクトル)は多くの要素がゼロになる表現で、単語の情報を扱う用途などに使われます。
BM25は、検索語の出現頻度や文書の長さなどを使って関連度を評価する方式です。Qdrantでは、BM25に基づく疎ベクトルと密ベクトルの検索結果を組み合わせられます。※17
例えば「電源が入らない」と「起動できない」の関係は意味検索で捉え、製品番号「B-12」は単語の情報で補う考え方です。必ず精度が上がるとは限らないため、実際の質問と正解文書で効果を確かめましょう。
実装手順
ここでは、英語のサンプル文書を使い、埋め込みの作成から検索までを実装します。追加するFastEmbedは、手元で埋め込みモデルを実行するライブラリです。※18
.\.venv\Scripts\python.exe -m pip install "qdrant-client[fastembed]==1.19.0"次の2つのPythonコードを、同じフォルダーに新しく作ったhybrid_demo.pyへ順番に記載してください。初回は埋め込みモデルのダウンロードが発生するため、インターネット接続と保存容量が必要です。
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333", timeout=60)
collection = "weel_hybrid_demo"
dense_model = "sentence-transformers/all-MiniLM-L6-v2"
sparse_model = "Qdrant/bm25"
texts = [
"B-12 laptops: hold the power button to restart.",
"B-12 laptops: the battery lasts for eight hours.",
"Expense reports must be submitted every month.",
]
if not client.collection_exists(collection):
client.create_collection(
collection_name=collection,
vectors_config={
"dense": models.VectorParams(
size=client.get_embedding_size(dense_model),
distance=models.Distance.COSINE,
)
},
sparse_vectors_config={
"sparse": models.SparseVectorParams(
modifier=models.Modifier.IDF
)
},
)
client.upsert(
collection_name=collection,
wait=True,
points=[
models.PointStruct(
id=i,
vector={
"dense": models.Document(text=text, model=dense_model),
"sparse": models.Document(text=text, model=sparse_model),
},
payload={"text": text},
)
for i, text in enumerate(texts, start=1)
],
)同じポイントにdenseとsparseという名前で2種類の表現を持たせます。Modifier.IDFは、多くの文書に出る語と珍しい語を区別する重み付けをQdrant側で行う設定です。
question = "How do I restart a B-12 laptop?"
result = client.query_points(
collection_name=collection,
prefetch=[
models.Prefetch(
query=models.Document(text=question, model=model),
using=name,
limit=10,
)
for name, model in [
("dense", dense_model), ("sparse", sparse_model)
]
],
query=models.FusionQuery(fusion=models.Fusion.RRF),
with_payload=True,
limit=3,
)
for point in result.points:
print(point.id, point.payload["text"]).\.venv\Scripts\python.exe hybrid_demo.pyで実行すると、統合した検索結果が表示されます。RRFは、スコアの尺度が異なる検索結果を順位に基づいて統合する方式であり、両方の生スコアをそのまま足す処理ではありません。※17
精度向上のポイント
精度を調整する際は、検索結果を評価してから設定を変えることが大切です。まず、RRFで統合する前の候補数と、最終的に取得する件数を分けて調整します。
Qdrant 1.17以降は、検索方式ごとに重みを付けられる重み付きRRFにも対応しています。製品番号を含む質問が多い場合などは、評価用の質問で効果を確認しながら、単語側を重くする設定を試してください。※17
候補文書を別のモデルで再評価して並べ直す「リランキング」も選択肢です。日本語の文書を扱う場合は、日本語に対応した埋め込みモデルを選び、BM25で使う単語の分割方法も確認しましょう。文書と質問には、同じ分割処理を適用してください。※19※20
なお、この例で使用するFastEmbedのQdrant/bm25は日本語を公式対応言語としていません。日本語文書では、形態素解析ツールで単語を区切ってから登録するなど、別の方法も検討しましょう。
QdrantをRAGに活用し検索精度を高める方法

RAGでは、Qdrantが取得した資料を生成AIの回答材料に使います。回答の品質を上げるには、検索した文書が適切かどうかと、その内容から正しく回答しているかを分けて確認することが欠かせません。※21
RAGにおけるQdrantの役割
Qdrantは、RAGの中で質問に関係する文書を検索して返す役割を担います。登録時は文書を「チャンク」という小さなまとまりに分割し、各チャンクのベクトルと本文・出典などを保存する流れです。※21※22
質問時には、登録時と同じ埋め込みモデルで質問を数値化し、Qdrantへ検索を依頼します。取得した本文と質問をLLM(大規模な文章データなどから学習し、文章を生成する言語モデル)に渡すと、資料を参照した回答を作れます。
ただし、検索した資料が正しくても、回答が必ず正確になるわけではありません。出典を示す仕組みや、資料が見つからない際に回答を控える設定も組み合わせましょう。
検索精度を高めるためのチューニングポイント
RAGの改善では、埋め込みモデル・チャンク分割・検索条件など、要素ごとに原因を切り分けます。WEELには、社内文書を使うRAGの回答が期待と合わない、検索精度や速度を改善したいといった相談も寄せられています。
必要な文書が候補に入らない場合は、日本語や業務用語に合うモデルか、分割によって見出しや説明が切れていないかを確認しましょう。製品番号などの語句を拾えていなければ、ハイブリッド検索を試す余地があります。※17※22
速度の課題には、絞り込み項目の索引や、候補を探す範囲の設定が関係します。Qdrantの検索用索引HNSWでは、hnsw_efを大きくすると候補をより詳しく探索できます。ただし処理時間が増える場合もあるため、検索精度と速度を併せて測定してください。※16※23
MCPサーバーとの連携によるAIエージェントとの統合
Qdrantの公式MCPサーバーを使うと、AIエージェントから情報の保存や検索を呼び出せます。MCPは、AIと外部のデータやツールを接続するためのオープンなプロトコル(通信規約)で、AIエージェントは目的に応じてツールを使いながら処理を進める仕組みです。※24
公式実装には、情報を保存するqdrant-storeと、関連情報を探すqdrant-findがあります。データベース本体とは別のプログラムを介して接続する構成です。
設定では、Qdrantの接続先・コレクション名・埋め込みモデルなどを指定します。既存データを使う場合は、ベクトルの名前・次元数・登録時のモデルが合うかを確認してください。検索だけに使う場合は、QDRANT_READ_ONLYで読み取り専用モードを有効にすると、qdrant-storeによる意図しない書き込みを防げます。※24
文書の取り込みから回答生成まで、RAG全体の作り方を詳しく知りたい方は、以下の記事も参考にしてください。

Qdrantなどのご相談はWEELへ
Qdrantは、意味の近さと条件絞り込みを組み合わせ、社内文書などを探す検索基盤を作れるツールです。まずはDocker環境で起動し、Pythonから登録・検索する小さな検証を始めてみましょう。基本操作を確認できたら、実際の文書と質問に置き換え、必要な資料が見つかるかを確かめます。ハイブリッド検索やリランキングは、見つからない原因に応じて追加してください。
費用や運用の手間も確認しながら、検索の正確さと速さを両立できる構成へ育てていきましょう。
「生成AIで新しいプロダクトを作りたい」「もっと本格的に生成AIを業務に組み込みたい」とお考えの方は、ぜひ株式会社WEELにご相談ください。
開発実績として、
・新規事業室での「リサーチ」「分析」「事業計画検討」を70%自動化するAIエージェント
・社内お問い合わせの1次回答を自動化するRAG型のチャットボット
・過去事例や最新情報を加味して、10秒で記事のたたき台を作成できるAIプロダクト
・お客様からのメール対応の工数を80%削減したAIメール
・サーバーやAI PCを活用したオンプレでの生成AI活用
・生徒の感情や学習状況を踏まえ、勉強をアシストするAIアシスタント
などの開発実績がございます。
生成AIを活用したプロダクト開発の支援内容は、以下のページでも詳しくご覧いただけます。
➡︎株式会社WEELのサービスを詳しく見る。
アイデア段階でも構いません。まずは無料相談でお気軽にご相談ください。
➡︎生成AIを活用したプロダクト開発・業務効率化について相談する

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、通勤時間に読めるメルマガを配信しています。
最新のAI情報を日本最速で受け取りたい方は、以下からご登録ください。
また、弊社紹介資料もご用意しておりますので、併せてご確認ください。
Qdrantに関するよくある質問
※2:Qdrant「Distributed Deployment」
※3:FAISS公式リポジトリ
※4:Pinecone「Bring Your Own Cloud」
※5:Pinecone「Pricing」
※9:Docker「docker compose down」
※10:Docker「WSL 2 backend on Windows」
※11:Qdrant「Cloud Pricing」
※12:Qdrant Pythonクライアント「Release v1.19.0」
※14:Qdrant「Collections」
※15:Qdrant「Points」
※16:Qdrant「Search」
※17:Qdrant「Hybrid and Multi-Stage Queries」
※18:Qdrant「Implementing a Hybrid Search System」
※19:Qdrant「Hybrid Search with Reranking」
※21:Qdrant「RAG」
※22:Qdrant「Text Chunking Strategies」
※23:Qdrant「Measuring ANN Recall」
※24:Qdrant公式MCPサーバー
※25:Qdrant「API & SDKs」

