次の方法で共有


Azure AI Search でのマルチベクター フィールドのサポート

現在、この機能はパブリック プレビュー段階にあります。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。

Azure AI Search のマルチベクター フィールドサポート機能を使用すると、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 Search のクエリ メカニズムにいくつかの変更が導入されています。 ただし、主なクエリ処理はほとんど同じです。 以前は、 vectorQueries は最上位レベルのインデックス フィールドとして定義されたベクター フィールドのみをターゲットにできました。 この機能により、この制限を緩和し、vectorQueries が複合型のコレクション内で入れ子になっているフィールドをターゲットにすることができます (深さ 1 レベルまで)。 さらに、新しいクエリ時間パラメーター ( perDocumentVectorLimit) を使用できます。

  • perDocumentVectorLimit1 に設定すると、ドキュメントごとに最大 1 つのベクターが一致し、結果が個別のドキュメントから得られるようにします。
  • perDocumentVectorLimit0 (無制限) に設定すると、同じドキュメントの複数の関連ベクターを照合できます。
{
  "vectorQueries": [
    {
      "kind": "text",
      "text": "whales swimming",
      "K": 50,
      "fields": "scenes/embedding",
      "perDocumentVectorLimit": 0
    }
  ],
  "select": "title, scenes/timestamp, scenes/framePath"
}

1 つのフィールド内の複数のベクター間で順位を付けます

複数のベクターが 1 つのドキュメントに関連付けられている場合、Azure AI Search はそれらの中の最大スコアをランク付けに使用します。 システムは、最も関連性の高いベクターを使用して各ドキュメントにスコアを付け、関連性の低いものによる希釈を防ぎます。

コレクション内の関連する要素を取得する

$select パラメーターに複合型のコレクションが含まれている場合、ベクター クエリに一致した要素のみが返されます。 これは、タイムスタンプ、テキストの説明、画像パスなどの関連するメタデータを取得する場合に便利です。

ペイロード サイズを小さくするには、ベクター値自体を $select パラメーターに含めないでください。 不要な場合は、ベクター ストレージを完全に省略することを検討してください。

マルチベクター クエリのデバッグ (プレビュー)

ドキュメントに複数の埋め込みベクター (テキストや画像の埋め込みなど) が異なるサブフィールドに含まれている場合、システムはすべての要素で最も高いベクター スコアを使用してドキュメントをランク付けします。

各ベクターがどのように貢献したかを調べるには、innerHits デバッグ モード (最新のプレビュー REST API で使用可能) を使用します。

POST /indexes/my-index/docs/search?api-version=2025-11-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を使用して、個々の要素がスコアにどのように貢献したかについての洞察を得ることができます。