Konfigurera en förslagsställare för automatisk komplettering och föreslagna matchningar i en fråga

I Azure AI Search aktiveras typeahead (komplettera automatiskt) eller "search-as-you-type" via en förslagsförfattare. En förslagsspelare är en konfiguration i ett index som anger vilka fält som ska användas för att fylla i automatisk komplettering och förslag. Dessa fält genomgår extra tokenisering och genererar prefixsekvenser för att stödja matchningar på partiella termer. En förslagsställare som innehåller ett City-fält med värdet "Seattle" har till exempel prefixkombinationer av "sea", "seat", "seatt" och "seattl" för att stödja typeahead.

Matchningar på partiella termer kan antingen vara en automatiskt kompletterad fråga eller en föreslagen matchning. Samma förslag har stöd för båda funktionerna.

Typeahead kan kompletteras automatiskt, vilket slutför en partiell inmatning för en hel termfråga, eller förslag som bjuder in att klicka igenom till en viss matchning. Automatisk komplettering skapar en fråga. Förslag skapar ett matchande dokument.

Följande skärmbild visar båda. Automatisk komplettering förutser en potentiell term som avslutar "tw" med "in". Förslag är minisökresultat, där ett fält som hotellnamn representerar ett matchande hotellsökningsdokument från indexet. För förslag kan du visa alla fält som innehåller beskrivande information.

Visual comparison of autocomplete and suggested queries

Du kan använda dessa funktioner separat eller tillsammans. För att implementera dessa beteenden i Azure AI Search finns det en index- och frågekomponent.

  • Lägg till en förslagsföreläsare i en sökindexdefinition. Resten av den här artikeln fokuserar på att skapa en förslagsspelare.

  • Anropa en förslagsaktiverad fråga i form av en förslagsbegäran eller komplettera automatiskt med någon av API:erna som anges i ett senare avsnitt.

Sök som du-typ aktiveras per fält för strängfält. Du kan implementera båda typeahead-beteendena i samma söklösning om du vill ha en upplevelse som liknar den som anges i skärmbilden. Båda begärandena är avsedda för dokumentsamlingen av specifika index och svar returneras när en användare har minst en indatasträng med tre tecken.

Så här skapar du en förslagsspelare

Om du vill skapa en förslagsföreläsare lägger du till en i en indexdefinition. En förslagsförfattare tar ett namn och en samling fält som typeahead-upplevelsen är aktiverad för. Den bästa tiden att skapa en förslagsspelare är när du också definierar det fält som använder det.

  • Använd endast strängfält.

  • Om strängfältet är en del av en komplex typ (till exempel ett City-fält i Adress) inkluderar du den överordnade i fältsökvägen: "Address/City" (REST och C# och Python) eller ["Address"]["City"] (JavaScript).

  • Använd standardstandarden Lucene analyzer ("analyzer": null) eller ett språkanalysverktyg (till exempel "analyzer": "en.Microsoft") i fältet.

Om du försöker skapa en förslagsspelare med hjälp av befintliga fält tillåter API:et inte det. Prefix genereras under indexering, när partiella termer i två eller flera teckenkombinationer tokeniseras tillsammans med hela termer. Eftersom befintliga fält redan har tokeniserats måste du återskapa indexet om du vill lägga till dem i en förslagsföreläsare. Mer information finns i Återskapa ett Azure AI Search-index.

Välj fält

Även om en förslagsspelare har flera egenskaper är det främst en samling strängfält som du aktiverar en sök-som-du-typ-upplevelse för. Det finns en förslagslista för varje index, så förslagslistan måste innehålla alla fält som bidrar med innehåll för både förslag och automatisk komplettering.

Automatisk komplettering drar nytta av en större pool med fält att hämta från eftersom det extra innehållet har större potential för termslutsättning.

Förslag å andra sidan ger bättre resultat när ditt fältval är selektivt. Kom ihåg att förslaget är en proxy för ett sökdokument så välj fält som bäst representerar ett enda resultat. Namn, rubriker eller andra unika fält som skiljer mellan flera matchningar fungerar bäst. Om fälten består av repetitiva värden består förslagen av identiska resultat och en användare vet inte vilken som ska väljas.

För att uppfylla både sök-som-du-typ-funktioner lägger du till alla fält som du behöver för automatisk komplettering, men använder selectsedan , top, filteroch searchFields för att kontrollera resultat för förslag.

Välj analysverktyg

Ditt val av analysverktyg avgör hur fälten tokeniseras och prefixeras. För en bindestreckad sträng som "kontextkänslig" resulterar det till exempel i dessa tokenkombinationer: "context", "sensitive", "context-sensitive". Om du hade använt Lucene-standardanalysatorn skulle den bindestreckade strängen inte finnas.

När du utvärderar analysverktyg bör du överväga att använda API:et Analysera text för att få insikt i hur termer bearbetas. När du har skapat ett index kan du prova olika analysverktyg på en sträng för att visa tokenutdata.

Fält som använder anpassade analysverktyg eller inbyggda analysverktyg (förutom Standard Lucene) tillåts uttryckligen inte för att förhindra dåliga resultat.

Kommentar

Om du behöver kringgå analysvillkoret, till exempel om du behöver ett nyckelord eller ngramanalysverktyg för vissa frågescenarier, bör du använda två separata fält för samma innehåll. På så sätt kan ett av fälten ha en förslagstagare, medan det andra kan konfigureras med en anpassad analysverktygskonfiguration.

Skapa med hjälp av portalen

När du använder guiden Lägg till index eller Importera data för att skapa ett index kan du aktivera en förslagsspelare:

  1. I indexdefinitionen anger du ett namn för förslagsverktyget.

  2. Markera en kryssruta i kolumnen Förslag i varje fältdefinition för nya fält. En kryssruta är endast tillgänglig för strängfält.

Som tidigare nämnts påverkar valet av analysverktyg tokenisering och prefix. Överväg hela fältdefinitionen när du aktiverar förslagsgivare.

Skapa med REST

I REST-API:et lägger du till förslagsgivare via Skapa index eller Uppdateringsindex.

{
  "name": "hotels-sample-index",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

Skapa med .NET

Definiera ett SearchSuggester-objekt i C#. Suggesters är en samling på ett SearchIndex-objekt, men det kan bara ta ett objekt. Lägg till en förslagsföreläsare i indexdefinitionen.

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

Egenskapsreferens

Property Beskrivning
name Anges i förslagsdefinitionen, men anropas även för en begäran om automatisk komplettering eller förslag.
sourceFields Anges i förslagsdefinitionen. Det är en lista över ett eller flera fält i indexet som är källan till innehållet för förslag. Fälten måste vara av typen Edm.String. Om en analysator anges i fältet måste den vara en namngiven lexikal analysator från den här listan (inte en anpassad analysator).

Som bästa praxis anger du endast de fält som lämpar sig för ett förväntat och lämpligt svar, oavsett om det är en slutförd sträng i ett sökfält eller en listruta.

Ett hotellnamn är en bra kandidat eftersom det har precision. Utförliga fält som beskrivningar och kommentarer är för kompakta. På samma sätt är repetitiva fält, till exempel kategorier och taggar, mindre effektiva. I exemplen inkluderar vi ändå "kategori" för att visa att du kan inkludera flera fält.
searchMode REST-only-parameter, men också synlig i portalen. Den här parametern är inte tillgänglig i .NET SDK. Den anger vilken strategi som används för att söka efter kandidatfraser. Det enda läge som stöds för närvarande är analyzingInfixMatching, som för närvarande matchar i början av en term.

Använda en förslagsspelare

En förslagsspelare används i en fråga. När en förslagsföreläsare har skapats anropar du något av följande API:er för en sök-som-du-typ-upplevelse:

I ett sökprogram bör klientkoden använda ett bibliotek som jQuery UI Autocomplete för att samla in den partiella frågan och ange matchningen. Mer information om den här uppgiften finns i Lägga till automatisk komplettering eller föreslagna resultat i klientkoden.

API-användning illustreras i följande anrop till REST API:et Komplettera automatiskt. Det finns två lärdomar från det här exemplet. För det första, som med alla frågor, är åtgärden mot dokumentsamlingen för ett index och frågan innehåller en search parameter, som i det här fallet ger den partiella frågan. För det andra måste du lägga till suggesterName i begäran. Om en förslagsställare inte har definierats i indexet misslyckas anrop till automatisk komplettering eller förslag.

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2023-11-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Exempelkod

Nästa steg

Läs mer om begäranden\ formulering.