AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

MongoDB ベクトル検索クエリを実行する

このガイドでは、Mongoid を使用してMongoDB ベクトル検索クエリを実行する方法を学習できます。 MongoDB ベクトル検索、ベクトル埋め込みを使用することで、セマンティック意味に基づいてドキュメントをクエリできます。

Mongoid は、vector_search $vectorSearch集計ステージを構築および実行する メソッドを提供します。$vectorSearch 集計ステージの詳細については、 集計操作ガイドをご覧ください。

注意

配置の互換性

MongoDB ベクトル検索 を使用するには、 MongoDB AtlasクラスターまたはMongoDB 8.2 以降を実行中自己管理型配置に接続する必要があります。

MongoDB ベクトル検索の詳細については、Atlas ドキュメントの「MongoDB ベクトル検索の概要」を参照してください。

MongoDB ベクトル検索クエリを実行する前に、モデルに対してベクトルフィールドとベクトル検索インデックスを定義し、コレクションにインデックスを作成する必要があります 。ベクトル検索インデックスを宣言して作成する方法については、 インデックスガイドの「 MongoDB ベクトル検索インデックス 」セクションを参照してください。

このガイドの例では、sample_mflixデータベース内の embedded_moviesコレクションにマッピングする次の Movie モデルを使用します。 plot_embeddingフィールドには、各映画のプロットのベクトル埋め込みが保存されます。

class Movie
include Mongoid::Document
store_in collection: "embedded_movies", database: "sample_mflix"
field :title, type: String
field :plot, type: String
field :year, type: Integer
field :plot_embedding, type: Array
# Declare a vector search index on the `plot_embedding` field. The `_id`
# and `year` filter fields enable instance-level and filtered queries.
vector_search_index :plot_embedding_index,
fields: [
{
type: "vector",
path: "plot_embedding",
numDimensions: 1536,
similarity: "cosine"
},
{
type: "filter",
path: "_id"
},
{
type: "filter",
path: "year"
}
]
end

Tip

Atlas サンプル データ

サンプルデータをロードする方法については、Atlas sample_mflixドキュメントの「 Atlas へのデータのロード 」チュートリアルを参照してください。

MongoDB ベクトル検索クエリを実行するには、モデルで vector_searchクラスメソッドを呼び出し、クエリベクトルを最初の引数として渡します。クエリベクトルは、検索入力を表すベクトル埋め込みです。

次のコード例では、plot_embeddingフィールドでMongoDB ベクトル検索クエリを実行し、一致する各映画のタイトルを出力します。 Movie モデルはベクトル検索インデックス の1 つだけを宣言するため、Mongoid は使用するインデックスとベクトルフィールドを自動的に選択します。

# The query vector must have the same number of dimensions as the
# vector search index (1536, in this example).
query_vector = [ -0.0016261312, -0.028070757, -0.011342932, ..., -0.009710136 ]
movies = Movie.vector_search(query_vector, limit: 5)
movies.each do |movie|
puts movie.title
end
Thrill Seekers
About Time
The Time Machine
Timecop
Crusade in Jeans

vector_search メソッドは Movie ドキュメントの配列を返します。デフォルトでは 、10 の最も類似したドキュメントが返されます。結果の数を変更するには、limit オプションを設定します。上記の例では、5 の結果の制限が指定されています。

vector_search が返す各ドキュメントには vector_search_score 属性があります。この属性は、ドキュメントがクエリベクトルにどの程度一致するかを記述します。スコアが高いほど、一致が近いことを示します。

次のコードは 前の例と同じクエリを実行しますが、一致する各映画のタイトルとスコアが出力されます。

movies = Movie.vector_search(query_vector, limit: 5)
movies.each do |movie|
puts "#{movie.title}: #{movie.vector_search_score}"
end
Thrill Seekers: 0.9253387451171875
About Time: 0.9246978759765625
The Time Machine: 0.9229583740234375
Timecop: 0.9228057861328125
Crusade in Jeans: 0.9222259521484375

また、ドキュメントインスタンスで vector_search メソッドを呼び出して、そのドキュメントに類似するドキュメントを検索することもできます。ドキュメントで vector_search を呼び出すと、Mongoid はドキュメントに独自の保存済みベクトルをクエリベクトルとして使用し、ドキュメント自体を結果から除外します。

次のコードは、既存の Movieドキュメントに最も類似している 5 つの映画を検索します。

movie = Movie.find_by(title: "About Time")
neighbors = movie.vector_search(limit: 5)
neighbors.each do |neighbor|
puts neighbor.title
end
Thrill Seekers
The Time Machine
Timecop
Crusade in Jeans
Frequency

次のキーワード引数を vector_search メソッドに渡して、クエリをカスタマイズできます。

オプション
タイプ
説明
デフォルト値

index

String or Symbol

使用するベクトル検索インデックスの名前。モデルが複数のベクトル検索インデックスを宣言する場合にのみ必要です。

モデルから推論

path

String or Symbol

ベクトル埋め込みを含むフィールド。ベクトルフィールドがインデックス定義から推論できない場合にのみ必要です。

インデックスから推論

limit

Integer

返されるドキュメントの最大数。

10

num_candidates

Integer

検索中に考慮する最近傍の数。

limit * 10

filter

Hash

検索前にドキュメントを事前にフィルタリングするために使用されるクエリ。

フィルタリングなし

pipeline

Array

ベクトル検索の後に追加する追加の集計ステージ。

追加のステージなし

次のコードは、150 候補を考慮し、2000 年以降にリリースされた映画のみを返すMongoDB ベクトル検索クエリを実行します。

movies = Movie.vector_search(
query_vector,
limit: 5,
num_candidates: 150,
filter: { year: { "$gt" => 2000 } }
)

これらのオプションの詳細については、Atlas ドキュメントの $vectorSearch 演算子参照の「フィールド」セクションを参照してください。

ベクトル検索インデックスを宣言して作成する方法については、 インデックスガイドの「 MongoDB ベクトル検索インデックス 」セクションを参照してください。

このガイドで言及されている概念の詳細については、 Atlas ドキュメントの次のページを参照してください 。

このガイドで言及されているメソッドについて詳しくは、次のAPIドキュメントを参照してください。