Stöd för fält med flera vektorer i Azure AI-sökning (förhandsversion)

Observera

Azure AI-sökning är tillgängligt via Azure-portalen, REST-API:er och Azure-SDK:er. Den ligger också till grund för Foundry IQ, det hanterade kunskapsskiktet som omvandlar företagsinnehåll till återanvändbara, behörighetsmedvetna kunskapsbaser för agenter i Microsoft Foundry-portalen.

Important

Funktioner, funktioner eller egenskaper som har markerats (förhandsversion) omfattas inte av ett serviceavtal, rekommenderas inte för produktionsarbetsbelastningar och kan ändras eller begränsas innan de blir allmänt tillgängliga. Villkoren för Azure AI-sökning förhandsgranskning gäller för alla förhandsgranskningsfunktioner, oavsett om de är fristående eller en del av en allmänt tillgänglig funktion.

Funktionen för stöd för fält med flera vektorer (förhandsversion) i Azure AI-sökning gör att du kan indexera flera barnvektorer i ett enda dokumentfält. Den här funktionen är värdefull för användningsfall som multimodala data eller dokument med långa formulär, där en representation av innehållet med en enda vektor skulle leda till förlust av viktig information.

Begränsningar

  • Semantisk rankning stöds inte för kapslade segment i ett komplext fält. Därför stöder den semantiska rankern inte kapslade vektorer i fält med flera vektorer.

Förstå stöd för fält med flera vektorer

Traditionellt sett kan vektortyper till exempel Collection(Edm.Single) bara användas i fält på den översta nivån. Med introduktionen av stöd för fält med flera vektorer kan du nu använda vektortyper i kapslade fält i komplexa samlingar, vilket gör att flera vektorer kan associeras med ett enda dokument.

Ett enda dokument kan innehålla upp till 100 vektorer totalt i alla komplexa samlingsfält. Vektorfält kan bara kapslas en nivå djupt.

Indexdefinition med flervektorfält

Inga nya indexegenskaper behövs för den här funktionen. Här är en exempelindexdefinition:

{
  "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
        }
      ]
    }
  ]
}

Exempel på inmatningsdokument

Här är ett exempeldokument som visar hur du kan använda fält med flera vektorer i praktiken:

{
  "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"
    }
  ]
}

I det här exemplet är fältet scener en komplex samling som innehåller flera vektorer (inbäddningsfälten) tillsammans med andra associerade data. Varje vektor representerar en scen från filmen och kan användas för att hitta liknande scener i andra filmer, bland andra potentiella användningsfall.

Fråga med stöd för fält med flera vektorer

Stödfunktionen för flera vektorfält introducerar vissa ändringar i frågemekanismen i Azure AI-sökning. Den huvudsakliga frågeprocessen är dock i stort sett densamma. vectorQueries Tidigare kunde endast målvektorfält definieras som indexfält på toppnivå. Med den här funktionen lättar vi på begränsningen och tillåter vectorQueries att rikta sig mot fält som är inkapslade i en samling komplexa typer (upp till en nivå djup). Dessutom finns en ny frågetidsparameter tillgänglig: perDocumentVectorLimit.

  • Att ställa in perDocumentVectorLimit till 1 garanterar att högst en vektor per dokument matchas, vilket säkerställer att resultaten kommer från distinkta dokument.
  • Om du anger perDocumentVectorLimit till 0 (obegränsad) kan flera relevanta vektorer från samma dokument matchas.
{
  "vectorQueries": [
    {
      "kind": "text",
      "text": "whales swimming",
      "K": 50,
      "fields": "scenes/embedding",
      "perDocumentVectorLimit": 0
    }
  ],
  "select": "title, scenes/timestamp, scenes/framePath"
}

Rangordna över flera vektorer i ett enda fält

När flera vektorer är associerade med ett enda dokument använder Azure AI-sökning den högsta poängen bland dem för rangordning. Systemet använder den mest relevanta vektorn för att poängsätta varje dokument, vilket förhindrar utspädning med mindre relevanta.

Hämta relevanta element i en samling

När en samling komplexa typer ingår i parametern $select returneras endast de element som matchade vektorfrågan. Detta är användbart för att hämta associerade metadata, till exempel tidsstämplar, textbeskrivningar eller bildsökvägar.

Observera

Undvik att inkludera själva vektorvärdena i parametern för att minska nyttolaststorleken $select . Överväg att utelämna vektorlagring helt och hållet om det är onödigt.

Felsöka frågor med flera vektorer (förhandsversion)

När ett dokument innehåller flera inbäddade vektorer, till exempel text- och bildinbäddningar i olika underfält, använder systemet den högsta vektorpoängen för alla element för att rangordna dokumentet.

Om du vill felsöka hur varje vektor bidrog använder du felsökningsläget innerHits (tillgängligt i den senaste förhandsversionens REST API).

POST /indexes/my-index/docs/search?api-version=2026-08-01-preview
{
  "vectorQueries": [
    {
      "kind": "vector",
      "field": "keyframes.imageEmbedding",
      "kNearestNeighborsCount": 5,
      "vector": [ /* query vector */ ]
    }
  ],
  "debug": "innerHits"
}

Exempel på svarsform

"@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
            }
          }
        ]
      }
    ]
  }
}

Fältbeskrivningar

Fältet Beskrivning
ordinal Nollbaserat index för elementet i samlingen.
vectors En post per sökbart vektorfält som finns i elementet.
searchScore Slutpoäng för det här fältet, efter eventuell omvärdering och förstärkning.
vectorSimilarity Rå likhet som returneras av avståndsfunktionen.

Observera

innerHits rapporterar för närvarande endast vektorfält.

Förhållande till debug=vektor

Här följer några fakta om den här egenskapen:

  • Den befintliga debug=vector växeln förblir oförändrad.

  • När det används med fält med flera vektorer @search.documentDebugInfo.vector.subscore visar den maximala poäng som används för att rangordna det överordnade dokumentet, men inte detaljer per element.

  • Använd innerHits för att få insikt i hur enskilda element bidrog till poängen.