メモ
Azure AI 検索は、Azure ポータル、REST API、およびAzure SDKから使用できます。 また、Foundry IQ は、エンタープライズ コンテンツを、Microsoft Foundry ポータルのエージェントの再利用可能なアクセス許可に対応したナレッジ ベースに変換するマネージド ナレッジ レイヤーです。
メモ
この機能は現在プレビュー段階です。 このプレビューは、サービス レベル アグリーメントなしで提供され、運用環境のワークロードには推奨されません。 特定の機能がサポートされていないか、機能が制限されている可能性があります。 詳細については、「Microsoft Azure プレビューの使用条件を参照してください。
Azure AI 検索の複数ベクトル フィールドサポート機能を使用すると、1 つのドキュメント フィールド内で複数の子ベクトルのインデックスを作成できます。 この機能は、マルチモーダル データや長い形式のドキュメントなどのユース ケースで有用です。1 つのベクターでコンテンツを表すと、重要な詳細が失われる可能性があります。
制限
- セマンティックランカーは、複雑なフィールド内のネストされたチャンクに対してはサポートされていません。 したがって、セマンティック ランカーでは、複数ベクター フィールドの入れ子になったベクターはサポートされません。
マルチベクター フィールドのサポートについて
従来、 Collection(Edm.Single) などのベクター型は、最上位フィールドでのみ使用できました。 マルチベクター フィールドのサポートの導入により、複雑なコレクションの入れ子になったフィールドでベクター型を使用できるようになりました。これにより、複数のベクターを 1 つのドキュメントに効果的に関連付けることができます。
1 つのドキュメントには、すべての複雑なコレクション フィールドに対して、合計で最大 100 個のベクターを含めることができます。 ベクター フィールドは、深さ 1 レベルしか入れ子にできません。
複数ベクトル フィールドを持つインデックス定義
この機能に新しいインデックス プロパティは必要ありません。 インデックス定義の例を次に示します。
{
"name": "multivector-index",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true,
"searchable": true
},
{
"name": "title",
"type": "Edm.String",
"searchable": true
},
{
"name": "description",
"type": "Edm.String",
"searchable": true
},
{
"name": "descriptionEmbedding",
"type": "Collection(Edm.Single)",
"dimensions": 3,
"searchable": true,
"retrievable": true,
"vectorSearchProfile": "hnsw"
},
{
"name": "scenes",
"type": "Collection(Edm.ComplexType)",
"fields": [
{
"name": "embedding",
"type": "Collection(Edm.Single)",
"dimensions": 3,
"searchable": true,
"retrievable": true,
"vectorSearchProfile": "hnsw"
},
{
"name": "timestamp",
"type": "Edm.Int32",
"retrievable": true
},
{
"name": "description",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "framePath",
"type": "Edm.String",
"retrievable": true
}
]
}
]
}
サンプルインジェストドキュメント
実際にマルチベクター フィールドを使用する方法を示すサンプル ドキュメントを次に示します。
{
"id": "123",
"title": "Non-Existent Movie",
"description": "A fictional movie for demonstration purposes.",
"descriptionEmbedding": [1, 2, 3],
"releaseDate": "2025-08-01",
"scenes": [
{
"embedding": [4, 5, 6],
"timestamp": 120,
"description": "A character is introduced.",
"framePath": "nonexistentmovie\\scenes\\scene120.png"
},
{
"embedding": [7, 8, 9],
"timestamp": 2400,
"description": "The climax of the movie.",
"framePath": "nonexistentmovie\\scenes\\scene2400.png"
}
]
}
この例では、scenes フィールドは、複数のベクター (埋め込みフィールド) と他の関連データを含む複雑なコレクションです。 各ベクターは、ムービーのシーンを表し、他の映画で同様のシーンを見つけるために使用できます。その他のユース ケースの中でも同様です。
複数ベクター フィールドのサポートを使用したクエリ
マルチベクター フィールドのサポート機能では、Azure AI 検索のクエリ メカニズムにいくつかの変更が導入されています。 ただし、主なクエリ処理はほとんど同じです。
以前は、 vectorQueries は最上位レベルのインデックス フィールドとして定義されたベクター フィールドのみをターゲットにできました。 この機能により、この制限を緩和し、vectorQueries が複合型のコレクション内で入れ子になっているフィールドをターゲットにすることができます (深さ 1 レベルまで)。
さらに、新しいクエリ時間パラメーター ( perDocumentVectorLimit) を使用できます。
-
perDocumentVectorLimitを1に設定すると、ドキュメントごとに最大 1 つのベクターが一致し、結果が個別のドキュメントから得られるようにします。 -
perDocumentVectorLimitを0(無制限) に設定すると、同じドキュメントの複数の関連ベクターを照合できます。
{
"vectorQueries": [
{
"kind": "text",
"text": "whales swimming",
"K": 50,
"fields": "scenes/embedding",
"perDocumentVectorLimit": 0
}
],
"select": "title, scenes/timestamp, scenes/framePath"
}
1 つのフィールド内の複数のベクター間で順位を付けます
複数のベクトルが 1 つのドキュメントに関連付けられている場合、Azure AI 検索はそれらの中の最大スコアをランク付けに使用します。 システムは、最も関連性の高いベクターを使用して各ドキュメントにスコアを付け、関連性の低いものによる希釈を防ぎます。
コレクション内の関連する要素を取得する
$select パラメーターに複合型のコレクションが含まれている場合、ベクター クエリに一致した要素のみが返されます。 これは、タイムスタンプ、テキストの説明、画像パスなどの関連するメタデータを取得する場合に便利です。
メモ
ペイロード サイズを小さくするには、ベクター値自体を $select パラメーターに含めないでください。 不要な場合は、ベクター ストレージを完全に省略することを検討してください。
マルチベクター クエリのデバッグ (プレビュー)
ドキュメントに複数の埋め込みベクター (テキストや画像の埋め込みなど) が異なるサブフィールドに含まれている場合、システムはすべての要素で最も高いベクター スコアを使用してドキュメントをランク付けします。
各ベクターがどのように貢献したかをデバッグするには、 innerHits デバッグ モード (最新のプレビュー REST API で使用可能) を使用します。
POST /indexes/my-index/docs/search?api-version=2026-05-01-preview
{
"vectorQueries": [
{
"kind": "vector",
"field": "keyframes.imageEmbedding",
"kNearestNeighborsCount": 5,
"vector": [ /* query vector */ ]
}
],
"debug": "innerHits"
}
応答図形の例
"@search.documentDebugInfo": {
"innerHits": {
"keyframes": [
{
"ordinal": 0,
"vectors": [
{
"imageEmbedding": {
"searchScore": 0.958,
"vectorSimilarity": 0.956
},
"textEmbedding": {
"searchScore": 0.958,
"vectorSimilarity": 0.956
}
}
]
},
{
"ordinal": 1,
"vectors": [
{
"imageEmbedding": null,
"textEmbedding": {
"searchScore": 0.872,
"vectorSimilarity": 0.869
}
}
]
}
]
}
}
フィールドの説明
| フィールド | 説明 |
|---|---|
ordinal |
コレクション内の要素の 0 から始まるインデックス。 |
vectors |
要素に含まれる検索可能なベクター フィールドごとに 1 つのエントリ。 |
searchScore |
そのフィールドの最終スコア(再スコアリングやブーストを行った後)。 |
vectorSimilarity |
距離関数によって返される生の類似性。 |
メモ
innerHits 現在、ベクター フィールドのみがレポートされます。
debug=vector との関係
このプロパティに関するいくつかの事実を次に示します。
既存の
debug=vectorスイッチは変更されません。複数ベクトル フィールドと共に使用すると、
@search.documentDebugInfo.vector.subscoreは親ドキュメントのランク付けに使用される最大スコアを表示しますが、要素ごとの詳細は表示されません。innerHitsを使用して、個々の要素がスコアにどのように貢献したかについての洞察を得ることができます。