Skapa en fulltextfråga i Azure AI Search

Om du skapar en fråga för fulltextsökning innehåller den här artikeln steg för att konfigurera begäran. Den introducerar också en frågestruktur och förklarar hur fältattribut och språkanalysverktyg kan påverka frågeresultat.

Förutsättningar

Exempel på en frågebegäran i fulltext

I Azure AI Search är en fråga en skrivskyddad begäran mot dokumentsamlingen för ett enda sökindex, med parametrar som både informerar frågekörningen och formar svaret som kommer tillbaka.

En fullständig textfråga anges i en search parameter och består av termer, citattecken och operatorer. Andra parametrar lägger till mer definition i begäran.

Följande REST API-anrop för Sök EFTER illustrerar en frågebegäran med hjälp av ovan nämnda parametrar.

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
    "search": "NY +view",
    "queryType": "simple",
    "searchMode": "all",
    "searchFields": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "select": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "top": "10",
    "count": "true"
}

Viktiga punkter:

  • search tillhandahåller matchningskriterierna, vanligtvis hela termer eller fraser, med eller utan operatorer. Alla fält som tilldelas som "sökbara" i indexschemat är en kandidat för den här parametern.

  • queryType anger parsern: simple, full. Standardvärdet för enkel frågeparser är optimalt för fulltextsökning. Den fullständiga Lucene-frågeparsern är för avancerade frågekonstruktioner som reguljära uttryck, närhetssökning, fuzzy- och jokerteckensökning. Den här parametern kan också anges till semantic för semantisk rangordning för avancerad semantisk modellering i frågesvaret.

  • searchMode anger om matchningar baseras på "alla" kriterier (gynnar precision) eller "alla" kriterier (gynnar återkallande) i uttrycket. Standardvärdet är "any". Om du förväntar dig stor användning av booleska operatorer, vilket är mer troligt i index som innehåller stora textblock (ett innehållsfält eller långa beskrivningar), bör du testa frågor med parametern searchMode=Any|All för att utvärdera effekten av den inställningen på boolesk sökning.

  • searchFields begränsar frågekörningen till specifika sökbara fält. Under utvecklingen är det bra att använda samma fältlista för att välja och söka. Annars kan en matchning baseras på fältvärden som du inte kan se i resultatet, vilket skapar osäkerhet om varför dokumentet returnerades.

Parametrar som används för att forma svaret:

  • select anger vilka fält som ska returneras i svaret. Endast fält som har markerats som "hämtningsbara" i indexet kan användas i en select-instruktion.

  • top returnerar det angivna antalet dokument som matchar bäst. I det här exemplet returneras endast 10 träffar. Du kan använda top och skip (visas inte) för att visa resultatet.

  • count anger hur många dokument i hela indexet som matchar totalt sett, vilket kan vara mer än vad som returneras.

  • orderby används om du vill sortera resultat efter ett värde, till exempel en klassificering eller plats. Annars är standardvärdet att använda relevanspoängen för att rangordna resultat. Ett fält måste tillskrivas som "sorterbart" för att vara en kandidat för den här parametern.

Välj en klient

För tidig utveckling och koncepttestning börjar du med Azure-portalen eller en REST-klient. Båda metoderna är interaktiva, användbara för riktad testning och hjälper dig att utvärdera effekterna av olika egenskaper utan att behöva skriva någon kod.

Om du vill anropa sökning inifrån en app använder du klientbiblioteken Azure.Document.Search i Azure SDK:erna för .NET, Java, JavaScript och Python.

När du öppnar ett index i portalen kan du arbeta med Search Explorer tillsammans med index-JSON-definitionen på flikar sida vid sida för enkel åtkomst till fältattribut. Kontrollera tabellen Fält för att se vilka som är sökbara, sorterbara, filterbara och fasettbara när du testar frågor.

  1. Logga in på Azure-portalen och leta reda på söktjänsten.

  2. Öppna Index och välj ett index.

  3. Ett index öppnas på fliken Sökutforskaren så att du kan fråga direkt. Växla till JSON-vyn för att ange frågesyntax.

    Här är ett frågeuttryck för fulltextsökning som fungerar för exempelindexet Hotels:

       {
           "search": "pool spa +airport",
           "queryType": "simple",
           "searchMode": "any",
           "searchFields": "Description, Tags",
           "select": "HotelName, Description, Tags",
           "top": 10,
           "count": true
       }
    

    Följande skärmbild illustrerar frågan och svaret:

    Screenshot of Search Explorer with a full text query.

Välj en frågetyp: enkel | Full

Om frågan är fulltextsökning används en frågeparser för att bearbeta all text som skickas som söktermer och fraser. Azure AI Search erbjuder två frågeparsers.

  • Den enkla parsern förstår den enkla frågesyntaxen. Den här parsern valdes som standard för dess hastighet och effektivitet i textfrågor i fritt format. Syntaxen stöder vanliga sökoperatorer (AND, OR, NOT) för term- och frassökningar och prefixsökning (*som i "sea*" för Seattle och Seaside). En allmän rekommendation är att prova den enkla parsern först och sedan gå vidare till fullständig parser om programkraven kräver mer kraftfulla frågor.

  • Den fullständiga Lucene-frågesyntaxen, som aktiveras när du lägger till queryType=full i begäran, baseras på Apache Lucene Parser.

Fullständig syntax och enkel syntax överlappar i den utsträckning som båda stöder samma prefix och booleska åtgärder, men den fullständiga syntaxen ger fler operatorer. I sin helhet finns det fler operatorer för booleska uttryck och fler operatorer för avancerade frågor som fuzzy-sökning, jokerteckensökning, närhetssökning och reguljära uttryck.

Välj frågemetoder

Sökning är i grunden en användardriven övning, där termer eller fraser samlas in från en sökruta eller från klickhändelser på en sida. I följande tabell sammanfattas de mekanismer som du kan använda för att samla in användarindata, tillsammans med den förväntade sökupplevelsen.

Indata Upplevelse
Sökmetod En användare skriver termerna eller fraserna i en sökruta, med eller utan operatorer, och klickar på Sök för att skicka begäran. Sökning kan användas med filter på samma begäran, men inte med automatisk komplettering eller förslag.
Autocomplete-metod En användare skriver några tecken och frågor initieras när varje nytt tecken har skrivits. Svaret är en slutförd sträng från indexet. Om den angivna strängen är giltig klickar användaren på Sök för att skicka frågan till tjänsten.
Förslagsmetod Precis som med automatisk komplettering genereras några tecken och inkrementella frågor. Svaret är en listruta med matchande dokument, som vanligtvis representeras av några unika eller beskrivande fält. Om något av valen är giltigt klickar användaren på ett och det matchande dokumentet returneras.
Aspektbaserad navigering En sida visar klickbara navigeringslänkar eller sökvägar som begränsar sökomfånget. En fasetterad navigeringsstruktur består dynamiskt baserat på en inledande fråga. Om du till exempel search=* vill fylla i ett fasetterat navigeringsträd som består av alla möjliga kategorier. En fasetterad navigeringsstruktur skapas från ett frågesvar, men det är också en mekanism för att uttrycka nästa fråga. n REST API-referens, facets dokumenteras som en frågeparameter för en sökdokumentåtgärd, men den kan användas utan parametern search .
Filtermetod Filter används med fasetter för att begränsa resultaten. Du kan också implementera ett filter bakom sidan, till exempel för att initiera sidan med språkspecifika fält. I REST API-referens $filter dokumenteras som en frågeparameter för en sökdokumentåtgärd, men den kan användas utan parametern search .

Effekten av fältattribut på frågor

Om du är bekant med frågetyper och komposition kanske du kommer ihåg att parametrarna för en frågebegäran är beroende av fältattribut i ett index. Till exempel kan endast fält som markerats som searchable och retrievable användas i frågor och sökresultat. När du anger parametrarna search, filteroch orderby i din begäran bör du kontrollera attributen för att undvika oväntade resultat.

I portalens skärmbild nedan av hotellexempelindexet är sortableendast de två sista fälten "LastRenovationDate" och "Rating" ett krav för användning i en "$orderby" enda sats.

Index definition for the hotel sample

Fältattributdefinitioner finns i Skapa index (REST API).

Tokens effekt på frågor

Under indexeringen använder sökmotorn en textanalys på strängar för att maximera potentialen för att hitta en matchning vid frågetillfället. Strängar är som minst gemener, men beroende på analysatorn kan de också genomgå lemmatisering och stoppa ordborttagning. Större strängar eller sammansatta ord delas vanligtvis upp efter blanksteg, bindestreck eller bindestreck och indexeras som separata token.

Poängen med att ta bort här är att det du tror att ditt index innehåller, och vad som faktiskt finns i det, kan vara annorlunda. Om frågor inte returnerar förväntade resultat kan du granska de token som skapats av analysatorn via REST-API:et (Analyze Text). Mer information om tokenisering och påverkan på frågor finns i Partiell termsökning och mönster med specialtecken.

Nästa steg

Nu när du har en bättre förståelse för hur frågebegäranden fungerar kan du prova följande snabbstarter för praktisk upplevelse.