Een suggestie configureren voor automatisch aanvullen en voorgestelde overeenkomsten in een query

In Azure AI Search wordt typeahead (automatisch aanvullen) of 'search-as-you-type' ingeschakeld via een suggestie. Een suggestie is een configuratie in een index die aangeeft welke velden moeten worden gebruikt om automatisch aanvullen en suggesties in te vullen. Deze velden ondergaan extra tokenisatie, waardoor voorvoegselreeksen worden gegenereerd ter ondersteuning van overeenkomsten op gedeeltelijke termen. Een suggestie die bijvoorbeeld een veld Plaats met een waarde voor 'Seattle' bevat, heeft voorvoegselcombinaties 'sea', 'seat', 'seatt' en 'seattl' om typeahead te ondersteunen.

Overeenkomsten op gedeeltelijke termen kunnen een automatisch aangevulde query of een voorgestelde overeenkomst zijn. Dezelfde suggestie ondersteunt beide ervaringen.

Typeahead kan automatisch worden aangevuld, waarmee een gedeeltelijke invoer voor een hele termquery wordt voltooid of suggesties die klikken uitnodigen voor een bepaalde overeenkomst. Automatisch aanvullen produceert een query. Suggesties produceren een overeenkomend document.

In de volgende schermopname ziet u beide. Automatisch aanvullen verwacht een mogelijke term, waarbij 'tw' wordt afgerond met 'in'. Suggesties zijn minizoekresultaten, waarbij een veld als hotelnaam een overeenkomend document voor hotelzoekopdrachten uit de index vertegenwoordigt. Voor suggesties kunt u elk veld weergeven dat beschrijvende informatie biedt.

Visual comparison of autocomplete and suggested queries

U kunt deze functies afzonderlijk of samen gebruiken. Als u dit gedrag in Azure AI Search wilt implementeren, is er een index- en queryonderdeel.

  • Voeg een suggestie toe aan een zoekindexdefinitie. De rest van dit artikel is gericht op het maken van een suggestie.

  • Roep een query met suggesties aan, in de vorm van een suggestieaanvraag of aanvraag voor automatisch aanvullen, met behulp van een van de API's die in een latere sectie worden vermeld.

Search-as-you-type is ingeschakeld per veld voor tekenreeksvelden. U kunt beide typeaheadgedrag in dezelfde zoekoplossing implementeren als u een ervaring wilt die vergelijkbaar is met de ervaring die in de schermopname wordt aangegeven. Beide aanvragen zijn gericht op de documentenverzameling van specifieke index en antwoorden worden geretourneerd nadat een gebruiker ten minste een invoerreeks van drie tekens heeft opgegeven.

Een suggestie maken

Als u een suggestie wilt maken, voegt u er een toe aan een indexdefinitie. Een suggestie neemt een naam en een verzameling velden waarvoor de typeahead-ervaring is ingeschakeld. Het beste moment om een suggestie te maken, is wanneer u ook het veld definieert dat het gebruikt.

  • Gebruik alleen tekenreeksvelden.

  • Als het tekenreeksveld deel uitmaakt van een complex type (bijvoorbeeld een plaatsveld in adres), neemt u het bovenliggende veld op in het veldpad: "Address/City" (REST en C# en Python) of ["Address"]["City"] (JavaScript).

  • Gebruik de standaard Lucene Analyzer ("analyzer": null) of een taalanalyse (bijvoorbeeld "analyzer": "en.Microsoft") in het veld.

Als u een suggestie probeert te maken met behulp van vooraf bestaande velden, wordt deze door de API niet toegevoegd. Voorvoegsels worden gegenereerd tijdens het indexeren, wanneer gedeeltelijke termen in twee of meer tekencombinaties naast hele termen worden getokend. Aangezien bestaande velden al zijn tokenized, moet u de index opnieuw opbouwen als u ze aan een suggestie wilt toevoegen. Zie Een Azure AI Search-index herbouwen voor meer informatie.

Velden kiezen

Hoewel een suggestie meerdere eigenschappen heeft, is het voornamelijk een verzameling tekenreeksvelden waarvoor u een zoek-naar-u-type-ervaring inschakelt. Er is één suggestie voor elke index, dus de lijst met suggesties moet alle velden bevatten die inhoud bijdragen voor zowel suggesties als automatisch aanvullen.

Automatisch aanvullen profiteert van een grotere groep velden waaruit kan worden getrokken, omdat de extra inhoud meer mogelijkheden voor het voltooien van de termijn heeft.

Suggesties leveren daarentegen betere resultaten wanneer uw veldkeuze selectief is. Houd er rekening mee dat de suggestie een proxy is voor een zoekdocument, dus kies velden die het beste één resultaat vertegenwoordigen. Namen, titels of andere unieke velden die onderscheid maken tussen meerdere overeenkomsten, werken het beste. Als velden bestaan uit terugkerende waarden, bestaan de suggesties uit identieke resultaten en weet een gebruiker niet welke u moet kiezen.

Voeg alle velden toe die u nodig hebt voor automatisch aanvullen, maar gebruik selectvervolgens , topen filtersearchFields om de resultaten voor suggesties te beheren om te voldoen aan zowel zoek-als-u-type-ervaringen.

Analysen kiezen

Uw keuze voor een analyse bepaalt hoe velden worden getokeniseerd en voorafgegaan. Voor een afbreekstreepje, zoals contextgevoelig, resulteert het gebruik van een taalanalyse bijvoorbeeld in deze tokencombinaties: 'context', 'gevoelig', 'contextgevoelig'. Had u de standaard Lucene-analyse gebruikt, zou de afbreekstreepjetekenreeks niet bestaan.

Bij het evalueren van analyses kunt u overwegen om de Analyze Text-API te gebruiken om inzicht te krijgen in hoe termen worden verwerkt. Zodra u een index hebt gemaakt, kunt u verschillende analysefuncties op een tekenreeks proberen om tokenuitvoer weer te geven.

Velden die gebruikmaken van aangepaste analysen of ingebouwde analyses (met uitzondering van standaard Lucene) zijn expliciet niet toegestaan om slechte resultaten te voorkomen.

Notitie

Als u de beperking analyse moet omzeilen, bijvoorbeeld als u een trefwoord of ngramanalyse nodig hebt voor bepaalde queryscenario's, moet u twee afzonderlijke velden voor dezelfde inhoud gebruiken. Hierdoor kan een van de velden een suggestie hebben, terwijl de andere kan worden ingesteld met een aangepaste analyseconfiguratie.

Maken met behulp van de portal

Wanneer u Index toevoegen of de wizard Gegevens importeren gebruikt om een index te maken, kunt u een suggestie inschakelen:

  1. Voer in de indexdefinitie een naam in voor de suggestiefunctie.

  2. Schakel in elke velddefinitie voor nieuwe velden een selectievakje in de kolom Suggestie in. Er is alleen een selectievakje beschikbaar voor tekenreeksvelden.

Zoals eerder vermeld, is analysekeuze van invloed op tokenisatie en voorvoegsel. Houd rekening met de volledige velddefinitie bij het inschakelen van suggesties.

Maken met REST

Voeg in de REST API suggesties toe via Index maken of Index bijwerken.

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

Maken met .NET

Definieer in C# een SearchSuggester-object. Suggesters is een verzameling op een SearchIndex-object, maar het kan slechts één item duren. Voeg een suggestie toe aan de indexdefinitie.

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);
}

Naslaginformatie over eigenschappen

Eigenschappen Beschrijving
name Opgegeven in de suggestiedefinitie, maar ook aangeroepen op een aanvraag voor automatisch aanvullen of suggesties.
sourceFields Opgegeven in de suggestiedefinitie. Het is een lijst met een of meer velden in de index die de bron van de inhoud voor suggesties zijn. Velden moeten van het type Edm.Stringzijn. Als een analyse in het veld is opgegeven, moet het een lexicale analyse zijn uit deze lijst (niet een aangepaste analyse).

Geef als best practice alleen de velden op die zich lenen voor een verwacht en geschikt antwoord, ongeacht of het een voltooide tekenreeks in een zoekbalk of een vervolgkeuzelijst is.

Een hotelnaam is een goede kandidaat omdat het precisie heeft. Uitgebreide velden, zoals beschrijvingen en opmerkingen, zijn te dicht. Op dezelfde manier zijn terugkerende velden, zoals categorieën en tags, minder effectief. In de voorbeelden nemen we toch 'categorie' op om aan te tonen dat u meerdere velden kunt opnemen.
searchMode REST-parameter, maar ook zichtbaar in de portal. Deze parameter is niet beschikbaar in de .NET SDK. Het geeft de strategie aan die wordt gebruikt om te zoeken naar kandidaattermen. De enige modus die momenteel wordt ondersteund, is analyzingInfixMatching, dat momenteel overeenkomt met het begin van een term.

Een suggestie gebruiken

Een suggestie wordt gebruikt in een query. Nadat een suggestieprogramma is gemaakt, roept u een van de volgende API's aan voor een zoek-naar-u-type-ervaring:

In een zoektoepassing moet clientcode een bibliotheek zoals jQuery UI Automatisch aanvullen gebruiken om de gedeeltelijke query te verzamelen en de overeenkomst op te geven. Zie Automatisch aanvullen of voorgestelde resultaten toevoegen aan clientcode voor meer informatie over deze taak.

API-gebruik wordt geïllustreerd in de volgende aanroep van de REST API voor automatisch aanvullen. Er zijn twee punten uit dit voorbeeld. Net als bij alle query's is de bewerking gericht op de documentenverzameling van een index en bevat de query een search parameter, die in dit geval de gedeeltelijke query levert. Ten tweede moet u aan de aanvraag toevoegen suggesterName . Als een suggestie niet is gedefinieerd in de index, mislukken aanroepen naar automatisch aanvullen of suggesties.

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

Voorbeeldcode

Volgende stappen

Meer informatie over aanvragen\ formulering.