Dela via


Skapa ett index i Azure AI Search

I den här artikeln lär du dig hur du definierar ett schema för ett sökindex och push-överför det till en söktjänst. När du skapar ett index upprättas de fysiska datastrukturerna i söktjänsten. När indexet finns läser du in indexet som en separat uppgift.

Förutsättningar

  • Skrivbehörigheter som söktjänstdeltagare eller en administratörs-API-nyckel för nyckelbaserad autentisering.

  • En förståelse för de data som du vill indexeras. Ett sökindex baseras på externt innehåll som du vill göra sökbart. Sökbart innehåll lagras som fält i ett index. Du bör ha en tydlig uppfattning om vilka källfält du vill göra sökbara, hämtningsbara, filterbara, fasettbara och sorterbara (se schemachecklistan för vägledning).

  • Du måste också ha ett unikt fält i källdata som kan användas som dokumentnyckel (eller ID) i indexet.

  • En stabil indexplats. Det går inte att flytta ett befintligt index till en annan söktjänst. Gå tillbaka till programkraven och se till att din befintliga söktjänst (kapacitet och plats) är tillräcklig för dina behov.

  • Slutligen har alla tjänstnivåer indexgränser för antalet objekt som du kan skapa. Om du till exempel experimenterar på den kostnadsfria nivån kan du bara ha tre index vid en viss tidpunkt. Inom själva indexet finns gränser för vektorer och indexgränser för antalet enkla och komplexa fält.

Dokumentnycklar

Ett sökindex har två krav: det måste ha ett namn och en dokumentnyckel.

En dokumentnyckel är den unika identifieraren för ett sökdokument och ett sökdokument är en samling fält som helt beskriver något. Om du till exempel indexerar en datauppsättning för filmer innehåller ett sökdokument rubriken, genren och varaktigheten för en enda film.

I Azure AI Search måste en dokumentnyckel vara en sträng och den måste komma från unika värden i datakällan som tillhandahåller det innehåll som ska indexeras. En söktjänst genererar inte nyckelvärden, men i vissa scenarier (till exempel Azure-tabellindexeraren) syntetiserar den befintliga värden för att skapa en unik nyckel för de dokument som indexeras.

Under inkrementell indexering, där nytt och uppdaterat innehåll indexeras, läggs inkommande dokument med nya nycklar till, medan inkommande dokument med befintliga nycklar antingen sammanfogas eller skrivs över, beroende på om indexfälten är null eller ifyllda.

Schemachecklista

Använd den här checklistan för att underlätta besluten om utformningen av ditt sökindex.

  1. Granska namngivningskonventionerna så att index- och fältnamn överensstämmer med namngivningsreglerna.

  2. Granska Datatyper som stöds. Datatypen påverkar hur fältet används. Numeriskt innehåll kan till exempel filtreras men kan inte sökas i fulltext. Den vanligaste datatypen är Edm.String sökbar text, som tokeniseras och efterfrågas med hjälp av sökmotorn för fulltext. Den vanligaste datatypen för ett vektorfält är Edm.Single men du kan även använda andra typer.

  3. Identifiera en dokumentnyckel. En dokumentnyckel är ett indexkrav. Den är ett enda strängfält och fylls i från ett källdatafält som innehåller unika värden. Om du till exempel indexerar från Blob Storage används ofta metadatalagringssökvägen som dokumentnyckel eftersom den unikt identifierar varje blob i containern.

  4. Identifiera fälten i datakällan som bidrar med sökbart innehåll i indexet.

    Sökbart icke-innehåll innehåller korta eller långa strängar som efterfrågas med hjälp av sökmotorn för fulltext. Om innehållet är utförligt (små fraser eller större segment) experimenterar du med olika analysverktyg för att se hur texten tokeniseras.

    Sökbart vektorinnehåll kan vara bilder eller text (på valfritt språk) som finns som en matematisk representation. Du kan använda smala datatyper eller vektorkomprimering för att göra vektorfält mindre.

    Fältattributtilldelningar avgör både sökbeteenden och den fysiska representationen av ditt index i söktjänsten. Att avgöra hur fält ska anges är en iterativ process för många kunder. För att påskynda iterationer börjar du med exempeldata så att du enkelt kan släppa och återskapa dem.

  5. Identifiera vilka källfält som kan användas som filter. Numeriskt innehåll och korta textfält, särskilt de med upprepade värden, är bra alternativ. Kom ihåg följande när du arbetar med filter:

    • Filter kan användas i vektor- och nonvector-frågor, men själva filtret används alfanumeriska fält (icke-vektor) i ditt index.

    • Filterbara fält kan också användas i fasetterad navigering.

    • Filterbara fält returneras i godtycklig ordning, så överväg att även göra dem sorterbara.

  6. För vektorfält anger du en vektorsökningskonfiguration och de algoritmer som används för att skapa navigeringsvägar och fylla inbäddningsutrymmet. Mer information finns i Lägg till vektorfält.

    Vektorfält har extra egenskaper som icke-bevektorfält inte har, till exempel vilka algoritmer som ska användas och vektorkomprimering.

    Vektorfält utelämnar attribut som inte är användbara för vektordata, till exempel sortering, filtrering och fasettering.

  7. För icke-bevektorfält avgör du om du vill använda standardanalysatorn ("analyzer": null) eller en annan analysator. Analysverktyg används för att tokenisera textfält under indexering och frågekörning.

    För flerspråkiga strängar bör du överväga ett språkanalysverktyg.

    För avstavade strängar eller specialtecken bör du överväga specialiserade analysverktyg. Ett exempel är nyckelord som behandlar hela innehållet i ett fält som en enda token. Det här beteendet är användbart för data som postnummer, ID:t och vissa produktnamn. Mer information finns i Partiell termsökning och mönster med specialtecken.

Kommentar

Fulltextsökning utförs över termer som tokeniseras under indexering. Om dina frågor inte returnerar de resultat du förväntar dig testar du för tokenisering för att verifiera att strängen som du söker efter faktiskt finns. Du kan prova olika analysverktyg på strängar för att se hur token skapas för olika analysverktyg.

Skapa ett index

När du är redo att skapa indexet använder du en sökklient som kan skicka begäran. Du kan använda Azure-portalen eller REST-API:er för tidig utveckling och koncepttestning, annars är det vanligt att använda Azure SDK:er.

Under utvecklingen planerar du frekventa ombyggnader. Eftersom fysiska strukturer skapas i tjänsten är det nödvändigt att släppa och återskapa index för många ändringar. Du kan överväga att arbeta med en delmängd av dina data för att få återskapanden att gå snabbare.

Indexdesign via portalen tillämpar krav och schemaregler för specifika datatyper, till exempel att inte tillåta funktioner för fulltextsökning i numeriska fält.

  1. Logga in på Azure-portalen.

  2. Sök efter utrymme. usluga pretrage omfattas av maximalt antal index, som varierar beroende på tjänstnivå. Se till att du har plats för ett andra index.

  3. På sidan Översikt för söktjänsten väljer du något av alternativen för att skapa ett sökindex:

    • Lägg till index, en inbäddad redigerare för att ange ett indexschema
    • Importera guider

    Guiden är ett arbetsflöde från slutpunkt till slutpunkt som skapar en indexerare, en datakälla och ett färdigt index. Den läser också in data. Om det här är mer än vad du vill använda använder du Lägg till index i stället.

Följande skärmbild visar var Lägg till index och Importera data visas i kommandofältet. När ett index har skapats kan du hitta det igen på fliken Index .

Lägg till indexkommando

Dricks

När du har skapat ett index i portalen kan du kopiera JSON-representationen och lägga till den i programkoden.

Ange corsOptions för frågor mellan ursprung

Indexscheman innehåller ett avsnitt för att ange corsOptions. Som standard kan JavaScript på klientsidan inte anropa några API:er eftersom webbläsare förhindrar alla begäranden mellan ursprung. Om du vill tillåta korsande frågor till ditt index aktiverar du CORS (Resursdelning mellan ursprung) genom att ange attributet corsOptions . Av säkerhetsskäl stöder endast fråge-API:er CORS.

"corsOptions": {
  "allowedOrigins": [
    "*"
  ],
  "maxAgeInSeconds": 300

Följande egenskaper kan anges för CORS:

  • allowedOrigins (krävs): Det här är en lista över ursprung som har åtkomst till ditt index. JavaScript-kod som hanteras från dessa ursprung kan köra frågor mot ditt index (förutsatt att anroparen tillhandahåller en giltig nyckel eller har behörigheter). Varje ursprung är vanligtvis av formuläret protocol://<fully-qualified-domain-name>:<port> men <port> utelämnas ofta. Mer information finns i Resursdelning mellan ursprung (Wikipedia).

    Om du vill tillåta åtkomst till alla ursprung ska du inkludera * som ett enskilt objekt i matrisen allowedOrigins . Detta är inte en rekommenderad metod för produktionssökningstjänster , men det är ofta användbart för utveckling och felsökning.

  • maxAgeInSeconds (valfritt): Webbläsare använder det här värdet för att fastställa varaktigheten (i sekunder) för att cachelagras CORS-förhandssvar. Detta måste vara ett icke-negativt heltal. En längre cacheperiod ger bättre prestanda, men det förlänger den tid som en CORS-princip måste börja gälla. Om det här värdet inte anges används en standardvaraktighet på fem minuter.

Tillåtna uppdateringar för befintliga index

Skapa index skapar fysiska datastrukturer (filer och inverterade index) i söktjänsten. När indexet har skapats är din möjlighet att göra ändringar med skapa eller uppdatera index beroende på om dina ändringar ogiltigförklarar dessa fysiska strukturer. De flesta fältattribut kan inte ändras när fältet har skapats i ditt index.

Du kan också skapa ett indexalias som fungerar som en stabil referens i programkoden. I stället för att uppdatera koden kan du uppdatera ett indexalias så att det pekar på nyare indexversioner.

För att minimera omsättningen i designprocessen beskriver följande tabell vilka element som är fasta och flexibla i schemat. Om du ändrar ett fast element måste du återskapa ett index, medan flexibla element kan ändras när som helst utan att den fysiska implementeringen påverkas.

Element Kan uppdateras?
Name Nej
Nyckel Nej
Fältnamn och typer Nej
Fältattribut (sökbara, filterbara, fasettbara, sorterbara) Nej
Fältattribut (kan hämtas) Ja
Lagrad (gäller för vektorer) Nej
Analyzer Du kan lägga till och ändra anpassade analysverktyg i indexet. När det gäller analystilldelningar i strängfält kan du bara ändra searchAnalyzer. Alla andra tilldelningar och ändringar kräver en ombyggnad.
Poängprofiler Ja
Förslag på alternativ Nej
resursdelning mellan ursprung (CORS) Ja
Kryptering Ja

Nästa steg

Använd följande länkar för att bekanta dig med att läsa in ett index med data eller utöka ett index med en synonymkarta.