qdrant-edge について
qdrant-edgeは、PythonまたはRustアプリケーションにQdrant Edgeを組み込む開発者向けのスキルガイドです。シャードの組み込み操作やスナップショット同期の方法に加え、単一ノード構成やクラウド同期機能がない点も説明します。
主な機能
- 01組み込みのBM25とスパースベクトル検索
- 02密ベクトルとスパースベクトルのハイブリッド検索
- 03スナップショットによるシャード更新
- 04手動での最適化とインデックス作成
- 05WALとバックアップ容量の見積もり
活用シーン
- 01サーバーのスナップショットからローカルシャードを作成
- 02デバイス上のシャードを段階的に更新
- 03キーワードとベクトルのハイブリッド検索
- 04一括書き込み後の圧縮とインデックス作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ qdrant/ skills --skill qdrant-edgeインストール後、Claude Code で/qdrant-edgeを入力して読み込まれたか確認します。
詳細
Qdrant Edge での構築
Edge はプロセス(Python または Rust)に組み込まれる Qdrant エンジンであり、ラップするための薄いローカルベクトルストアではありません。よくある失敗は、シャードにすでに備わっている機能、つまりキーワードスコアリング、スナップショットの適用、ファセット、カウントを作り直してしまうことです。実装を始める前に、シャード API を確認してください。Edge にない機能のひとつは、ワンコールでのクラウド同期です。組み込み機能を再実装したり、Edge にない機能を期待したりしないためにも、何が組み込まれているかを把握しておきましょう。Edge は単一ノードで、サーバーと同じデータ形式を共有します。
- Edge はベータ版です。バージョンを固定してください。リリースごとに API が変わります Qdrant Edge。
シャードと Qdrant サーバーの同期
用途:サーバーからシャードにデータを投入する場合、シャードを最新の状態に保つ場合、バックアップする場合、または複数のデバイスのデータをひとつのコレクションに集約する場合に使用します。
組み込みの .sync() はありません。同期は、シャードのヘルパーと独自のトランスポートを組み合わせて構成するパターンです。したがって、ワンコールの同期機能を探す必要はありません。
- ドキュメントに記載されているデュアルシャードパターンに従います。ローカル書き込み用の
mutableシャードと、サーバーのスナップショットから復元したimmutableシャードを使い、両方にクエリを実行して、スケジュールに従って更新します Edge synchronization guide。 - スナップショットのダウンロード(シャードのスナップショットエンドポイントへの通常の HTTP リクエスト)は自分で実装し、
unpack_snapshotとupdate_from_snapshotを使って適用します。手作業で tar を展開したり、セグメントをマージしたりしないでください Synchronization patterns。 - 同期のたびにフルスナップショットを使うのではなく、
snapshot_manifestから作成した部分スナップショットで増分更新します Synchronization patterns。 - プッシュは独自の二重書き込みとして実装します。ローカルで upsert するたびにポイントをキューに追加し、バックグラウンドワーカーでサーバーにも upsert します。オフライン中はバッファリングします Synchronization patterns。
デバイス上でのキーワード検索とハイブリッド検索
用途:単独で、またはベクトルと併用して、完全一致する語句や BM25 によるマッチングが必要な場合に使用します。
- BM25 は Edge に組み込まれています(
Bm25、Bm25Config、embed_document、embed_query)。EdgeSparseVectorParamsの IDFModifierを使用し、サーバーのスパースベクトル BM25 モデルとワイヤー互換です(Edge の BM25 ドキュメントが対象としているのは、スパースベクトルのバリアントのみです)。サーバーのスナップショットから投入したシャードは、再インデックスしなくてもローカルで BM25 クエリに応答できます。別の BM25 ライブラリを組み込まないでください Edge BM25 - Dense 埋め込みは Edge にありません。別パッケージの
fastembedを使ってデバイス上で生成します FastEmbed embeddings - ハイブリッド検索では、密ベクトルとスパースベクトルの処理を
prefetchesとして実行し、アプリケーションコードでランキングを結合するのではなく、ひとつのquery呼び出しでFusionクエリを使って統合します Reading data
シャードの運用
次の場合に使用します:書き込みが蓄積している、挿入後に検索結果が古く見える、またはバックアップのサイズがデータより大きい場合。
- Edge にはバックグラウンドオプティマイザーがありません。大量の書き込み後に
optimizeを呼び出してください。インデックス(スパースインデックスを含む)を作成し、削除済みのポイントを回収します。呼び出さない場合、そのデータはインデックスされないままです Edge quickstart - ファセット処理、カウント、列挙は組み込み機能(
facet、count、scroll)です。アプリケーションコードで集計するのではなく、フィルターまたはファセット処理に使うフィールドにcreate_field_indexでインデックスを作成してください Edge quickstart - 書き込み先行ログは 32 MB に事前割り当てされており、ディスク使用量やバックアップサイズが実際より大きく見えます。
wal_options(Rust)でサイズを縮小し、ファイルの実サイズを実際の使用量とみなさないでください Edge quickstart
やってはいけないこと
- 双方向の
.sync()や組み込みのプッシュ経路を期待すること。Edge が提供するのはスナップショットの適用機能であり、転送と二重書き込みは自分で実装する必要があります unpack_snapshotとupdate_from_snapshotを使わず、スナップショットのセグメントを手作業で展開したりマージしたりすること- Edge に組み込みの BM25 があるのに、独自またはサードパーティ製の BM25 を組み込むこと
- クエリに
embed_documentを使ったり、ドキュメントにembed_queryを使ったりすること。重み付けが異なるため、結果が不正になります - 密ベクトルとスパースベクトルのランキングをアプリケーションコードで統合すること。Edge の
queryはprefetchesを受け付け、Fusionクエリで統合します - サーバーのようなバックグラウンドオプティマイザーがあると思い込むこと。
optimizeを呼び出すまでは、インデックス作成も圧縮も行われません - 分散検索やマルチノード検索が必要な場合に Edge を使うこと。単一ノード構成です Qdrant Edge
- Edge のドキュメントに記載されていない言語、OS、アクセラレーターへの対応を主張すること