Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

ベクトル フィールドにインデックスを作成する方法

vector 型を使用してベクトル埋め込みをインデックスできます。ベクター フィールドには、次のタイプの数値の配列を含める必要があります。

  • BSON int32int64、またはdoubleデータ型

  • BSON double データ型

集計パイプラインでは、 $searchステージと同様に$vectorSearch vectorSearch 演算子を使用して、vector 型としてインデックス付けされたフィールドをクエリできます。

次の制限が適用されます。

  • オブジェクトの配列を持つフィールド(MongoDB Search embeddedDocuments 型)を vector 型としてインデックスすることはできません。

  • vector 型を含むインデックス定義では、storedSourcetrueに設定できません。代わりに、include を使用してmongot に保存するフィールドを指定するか、exclude を使用してvector 型のフィールドをストレージから除外してください。

  • $vectorSearch ステージを使用して vector タイプとしてインデックス付けされたフィールドをクエリすることはできません。

  • MongoDB Search プレイグラウンドで、フィールドをvector タイプとしてインデックスできます。

MongoDB Search vector 型は次のパラメータを取ります。

オプション
タイプ
必要性
説明

type

vector

必須

このフィールド型を識別する、人間が判読できるラベル。値はvectorでなければなりません。

numDimensions

Int

必須

MongoDB Search がインデックス時とクエリ時に強制するベクトルの次元数。このフィールドは vector 型のフィールドにのみ設定できます。8192 以下の値を指定する必要があります。

量子化ベクトルまたは BinData のインデックス作成には、次のいずれかの値を指定できます。

  • 1 取り込み用の int8 ベクトルの場合は 8192

  • 取り込み用の int1 ベクトルに対する 8 の複数形。

  • 1 自動スカラー量子化の場合は binData(float32) ベクトルは 8192 に、array(float32) ベクトルは

  • 自動バイナリ量子化用の binData(float32) ベクトルと array(float32) ベクトルの 8 の倍数。

選択した埋め込みモデルによってベクトル埋め込みの次元数が決まります。出力の次元数に関して複数のオプションを持つモデルもあります。「埋め込みを作成する方法の選択」を参照してください。

similarity

文字列

必須

上位 K 近傍の検索に使用するベクトル類似度関数。このフィールドはvector タイプのフィールドにのみ設定できます。

次のいずれかの値を指定できます。

  • euclidean - ベクトルの端点間の距離を測定します。

  • cosine - ベクトル間の角度に基づいて類似性を測定します。

  • dotProduct - は cosine と同様の類似性を測定しますが、ベクトルの大きさを考慮します。

類似性関数について」を参照してください。

quantization

文字列

任意

ベクトルの自動ベクトル量子化のタイプ。埋め込みが float または double ベクトルである場合にのみ、この設定を使用してください。

次のいずれかの値を指定できます。

  • none -ベクトル埋め込みの自動量子化がないことを示します。 取り込み用に事前に量子化されたベクトルがある場合は、この設定を使用します。 省略した場合、これはデフォルト値になります。

  • scalar - 値を 1 バイト整数に変換するスカラー量子化を示します。

  • binary - 値を単一ビットに変換する バイナリ量子化を示します。この値を使用するには、numDimensions は 8 の倍数である必要があります。

    精度が重要な場合は、binary の代わりに none または scalar を選択します。

About Quantization.」を参照してください。

indexingMethod

文字列

任意

ベクトルフィールドのインデックス構造。値は次のとおりです。

  • hnsw - 類似ベクトルが接続されているグラフベースのインデックスの場合

  • flat - 平面、非グラフ、インデックスの場合

省略した場合、デフォルトは hnsw になります。hnswを指定すると、 MongoDB Vector Search は近似最近傍探索検索を実行し、 Hierarchical Navigable Small Worlds グラフに対して厳密最近傍探索検索を実行します。hnswOptions を指定することもできます。

flat を指定すると、 MongoDB ベクトル検索 は完全忠実度または量子化されたベクトルに対してフルスキャンを実行します。During an 近似最近傍探索 検索中、 MongoDB Vector Search はnumCandidates の設定を無視します。厳密最近傍探索 検索の場合、 MongoDB Vector Search は完全な忠実度ベクトルに対してフルスキャンを実行します。

hnswOptions

オブジェクト

任意

Hierarchical Navigable Small Worldsグラフの構築に使用するパラメーター。省略した場合、は maxEdgesnumEdgeCandidates パラメーターにデフォルト値を使用します。

重要:これはプレビュー機能として利用可能です。デフォルト値を変更すると、MongoDB Search インデックスとクエリに悪影響を与える可能性があります。

hnswOptions.
maxEdges

Int

任意

Hierarchical Navigable Small Worldsグラフでノードが持つことができるエッジ(または接続)の最大数。値は、両端を含む 16 から 64 までです。省略した場合、デフォルトは 16 になります。例、 の値が 16 の場合、各ノードはHierarchical Navigable Small Worldsグラフのレイヤーに最大 60 個の出力エッジを持つことができます。

数値が高いほど、グラフの接続が強化されるため、再現率(検索結果の精度)が向上します。ただし、これにより各グラフ ノードで評価すべき近傍ノードの数が増加するため、クエリ時間およびインデックス作成時間も増加します。また、階層的ナビゲーション可能なスモール ワールドグラフにおいて、各接続ごとに追加ノードを格納するためのメモリも多く必要になります。

hnswOptions.
numEdgeCandidates

Int

任意

クエリ時の numCandidates と同様に、このパラメータは、新しいノードに接続する上で最も近い隣接ノードを見つけるため、評価するノードの最大数を制御します。値は、100 から 3200 の範囲で、両端を含みます。省略した場合、デフォルトは 100 になります。

数値が大きいほど、高品質な接続を持つグラフが提供され、検索品質(リコール)が向上しますが、クエリのレイテンシが増加する可能性もあります。

以下のインデックス定義例では、サンプルデータsample_mflix.embedded_moviesコレクションを使用します。コレクションを読み込んだ後は、以下の例を使用して、クエリを実行するためにplot_embedding_voyage_3_large フィールドをvector 型としてインデックス化できます。MongoDB Search の演算子あるvectorSearchを使用します。このインデックスに対して実行するサンプルクエリについては、こちらの例を参照してください。

このインデックス定義は、動的にインデックス可能なすべてのフィールドがデフォルトtypeSetを用いて自動的にインデックスされ、さらにplot_embedding_voyage_3_large フィールドが以下の設定で vector 型としてインデックスされます。

  • 2048 次元数

  • dotProduct 類似関数

  • scalar 量子化

  • hnsw (デフォルト)インデックスの作成メソッド