Share via


Indexprojecties in Azure AI Search

Belangrijk

Indexprojecties bevinden zich in openbare preview onder aanvullende gebruiksvoorwaarden. Deze is beschikbaar via Azure Portal, 2023-10-01-Preview REST API's, Azure Portal en bètaclientbibliotheken die zijn bijgewerkt om de functie op te nemen.

Indexprojecties zijn een onderdeel van een definitie van een vaardighedenset die de vorm van een secundaire index definieert, die een een-op-veel-indexpatroon ondersteunt, waarbij inhoud van een verrijkingspijplijn meerdere indexen kan richten.

Indexprojecties maken gebruik van ai-verrijkte inhoud die wordt gegenereerd door een verrijkingspijplijn en indexeer deze in een secundaire index (anders dan die waarop een indexeerfunctie standaard is gericht) in uw zoekservice. Met indexprojecties kunt u de gegevens ook opnieuw vormgeven voordat u deze indexeert, zodat u op unieke wijze een matrix met verrijkte items kunt scheiden in meerdere zoekdocumenten in de doelindex, ook wel 'een-op-veel'-index genoemd. 'Een-op-veel'-indexering is handig voor scenario's voor het segmenteren van gegevens, waarbij u mogelijk een primaire index wilt voor niet-gesegmenteerde inhoud en een secundaire index voor gesegmenteerd.

Als u in het verleden cognitieve vaardigheden hebt gebruikt, weet u al dat vaardighedensets verrijkte inhoud maken. Vaardighedensets verplaatsen een document door een reeks verrijkingen die atomische transformaties aanroepen, zoals het herkennen van entiteiten of het vertalen van tekst. Standaard wordt één document dat in een vaardighedenset wordt verwerkt, toegewezen aan één document in de zoekindex. Dit betekent dat als u segmentering van een invoertekst uitvoert en vervolgens verrijkingen op elk segment uitvoert, het resultaat in de index wanneer deze wordt toegewezen via outputFieldMappings een matrix is van de gegenereerde verrijkingen. Met indexprojecties definieert u een context waarmee elk segment verrijkte gegevens aan een eigen zoekdocument moet worden toegewezen. Hiermee kunt u een een-op-veel-toewijzing van de verrijkte gegevens van een document toepassen op de zoekindex.

Definitie van indexprojecties

Indexprojecties worden gedefinieerd in een definitie van een vaardighedenset en worden voornamelijk gedefinieerd als een matrix van selectors, waarbij elke selector overeenkomt met een andere doelindex in de zoekservice. Voor elke selector zijn de volgende parameters vereist als onderdeel van de definitie:

  • targetIndexName: De naam van de index in de zoekservice waarnaar de indexprojectiegegevensindex gaat.
  • parentKeyFieldName: De naam van het veld in de doelindex die de waarde van de sleutel voor het bovenliggende document bevat.
  • sourceContext: De verrijkingsaantekening waarmee de granulariteit wordt gedefinieerd waarop gegevens kunnen worden toegewezen aan afzonderlijke zoekdocumenten. Zie Vaardigheidscontext en invoeraantekeningstaal voor meer informatie.
  • mappings: Een matrix van toewijzingen van verrijkte gegevens aan velden in de zoekindex. Elke toewijzing bestaat uit:
    • name: De naam van het veld in de zoekindex waarin de gegevens moeten worden geïndexeerd,
    • source: Het verrijkingsaantekeningspad waaruit de gegevens moeten worden opgehaald.

Elk mapping kan ook recursief gegevens definiëren met een optioneel sourceContext veld, inputs vergelijkbaar met het kennisarchief of Shaper Skill. Met deze parameters kunt u gegevens vormgeven die moeten worden geïndexeerd in velden van het type Edm.ComplexType in de zoekindex.

De index die in de targetIndexName parameter is gedefinieerd, heeft de volgende vereisten:

  • Moet al zijn gemaakt in de zoekservice voordat de vaardighedenset met de definitie van de indexprojecties wordt gemaakt.
  • Moet een veld bevatten met de naam die is gedefinieerd in de parentKeyFieldName parameter. Dit veld moet van het type Edm.Stringzijn, kan niet het sleutelveld zijn en moet filterbaar zijn ingesteld op waar.
  • Het sleutelveld moet doorzoekbaar zijn ingesteld op waar en moet worden gedefinieerd met de keyword analyse.
  • Er moeten velden zijn gedefinieerd voor elk van de names die zijn gedefinieerd in mappings, waarvan geen het sleutelveld kan zijn.

Hier volgt een voorbeeld van een nettolading voor een definitie van indexprojecties die u kunt gebruiken om afzonderlijke pagina's te projecteren op basis van de vaardigheid Splitsen als hun eigen documenten in de zoekindex.

"indexProjections": {
    "selectors": [
        {
            "targetIndexName": "myTargetIndex",
            "parentKeyFieldName": "ParentKey",
            "sourceContext": "/document/pages/*",
            "mappings": [
                {
                    "name": "chunk",
                    "source": "/document/pages/*"
                }
            ]
        }
    ]
}

Bovenliggende documenten verwerken

Omdat indexprojecties effectief onderliggende documenten genereren voor elk 'bovenliggend' document dat door een vaardighedenset wordt uitgevoerd, hebt u ook de volgende opties voor het afhandelen van de indexering van de 'bovenliggende' documenten.

  • Als u bovenliggende en onderliggende documenten in afzonderlijke indexen wilt bewaren, moet u ervoor zorgen dat de targetIndexName definitie van de indexeerfunctie verschilt van de targetIndexName gedefinieerde indexprojectiekiezer.

  • Als u bovenliggende en onderliggende documenten in dezelfde index wilt indexeren, moet u ervoor zorgen dat het schema voor de doelindex werkt met zowel uw gedefinieerde fieldMappings als outputFieldMappings in de definitie van de indexeerfunctie en de in de mappings indexprojectiekiezer. Vervolgens geeft u hetzelfde targetIndexName op voor de definitie van de indexeerfunctie en de indexprojectieselector.

  • Als u bovenliggende documenten wilt negeren en alleen onderliggende documenten wilt indexeren, moet u nog steeds een targetIndexName definitie van de indexeerfunctie opgeven (u kunt gewoon hetzelfde opgeven als voor de indexprojectiekiezer). Definieer vervolgens een afzonderlijk parameters object naast uw selectors definitie met een projectionMode sleutel die is ingesteld op skipIndexingParentDocuments, zoals hier wordt weergegeven:

    "indexProjections": {
        "selectors": [
            ...
        ],
        "parameters": {
            "projectionMode": "skipIndexingParentDocuments"
        }
    }
    

REST API-versie 2023-10-01-Preview kan worden gebruikt om indexprojecties te maken via toevoegingen aan een vaardighedenset.

Levenscyclus van inhoud

Als de gegevensbron van de indexeerfunctie ondersteuning biedt voor het bijhouden en verwijderen van wijzigingen, kan het indexeringsproces de primaire en secundaire indexen synchroniseren om deze wijzigingen op te halen.

Telkens wanneer u de indexeerfunctie en vaardighedenset uitvoert, worden de indexprojecties bijgewerkt als de vaardighedenset of onderliggende brongegevens zijn gewijzigd. Wijzigingen die door de indexeerfunctie worden opgehaald, worden via het verrijkingsproces doorgegeven aan de projecties in de index, zodat uw verwachte gegevens een huidige weergave van inhoud in de oorspronkelijke gegevensbron zijn.

Notitie

Hoewel u de gegevens in de geprojecteerde documenten handmatig kunt bewerken met behulp van de indexpush-API, worden alle bewerkingen overschreven bij de volgende pijplijntoeroep, ervan uitgaande dat het document in de brongegevens wordt bijgewerkt.

Verwachte sleutelwaarde

Elk indexprojectiedocument bevat een unieke identificatiesleutel die door de indexeerfunctie wordt gegenereerd om ervoor te zorgen dat de uniekheid en het bijhouden van wijzigingen en verwijdering correct werken. Deze sleutel bevat de volgende segmenten:

  • Een willekeurige hash om uniekheid te garanderen. Deze hash verandert als het bovenliggende document wordt bijgewerkt in indexeerfunctie wordt uitgevoerd.
  • De sleutel van het bovenliggende document.
  • Het verrijkingsaantekeningspad waarmee de context wordt geïdentificeerd waaruit dat document is gegenereerd.

Als u bijvoorbeeld een bovenliggend document splitst met de sleutelwaarde 123 in vier pagina's en elk van deze pagina's als een eigen document wordt geprojecteerd via indexprojecties, ziet de sleutel voor de derde pagina met tekst er ongeveer als '01f07abfe7ed_123_pages_2' uit. Als het bovenliggende document vervolgens wordt bijgewerkt om een vijfde pagina toe te voegen, kan de nieuwe sleutel voor de derde pagina bijvoorbeeld '9d800bdacc0e_123_pages_2' zijn, omdat de willekeurige hashwaarde verandert tussen de indexeerfunctie, zelfs als de rest van de projectiegegevens niet zijn gewijzigd.

Wijzigingen of toevoegingen

Als een bovenliggend document zodanig wordt gewijzigd dat de gegevens in een geprojecteerd indexdocument worden gewijzigd (een voorbeeld is als een woord op een bepaalde pagina is gewijzigd, maar er geen netto nieuwe pagina's zijn toegevoegd), worden de gegevens in de doelindex voor die specifieke projectie bijgewerkt om deze wijziging weer te geven.

Als een bovenliggend document zodanig wordt gewijzigd dat er nieuwe geprojecteerde onderliggende documenten zijn die er nog niet eerder waren (een voorbeeld is als een of meer pagina's aan tekst aan het document zijn toegevoegd), worden deze nieuwe onderliggende documenten toegevoegd wanneer de indexeerfunctie de volgende keer wordt uitgevoerd.

In beide gevallen worden alle geprojecteerde documenten bijgewerkt met een nieuwe hashwaarde in hun sleutel, ongeacht of hun specifieke inhoud is bijgewerkt.

verwijderingen

Als een bovenliggend document zodanig wordt gewijzigd dat een onderliggend document dat wordt gegenereerd door indexprojecties niet meer bestaat (een voorbeeld is als een tekst wordt ingekort zodat er minder segmenten zijn dan voorheen), wordt het bijbehorende onderliggende document in de zoekindex verwijderd. De resterende onderliggende documenten krijgen ook hun sleutel bijgewerkt om een nieuwe hashwaarde op te nemen, zelfs als hun inhoud anders niet is gewijzigd.

Als een bovenliggend document volledig uit de gegevensbron is verwijderd, worden de bijbehorende onderliggende documenten alleen verwijderd als de verwijdering wordt gedetecteerd door een dataDeletionDetectionPolicy gedefinieerde definitie van de gegevensbron. Als u geen geconfigureerd document hebt dataDeletionDetectionPolicy geconfigureerd en een bovenliggend document uit de gegevensbron wilt verwijderen, moet u de onderliggende documenten handmatig verwijderen als ze niet meer nodig zijn.