Een volledige-tekstquery maken in Azure AI Search

Als u een query bouwt voor zoeken in volledige tekst, bevat dit artikel de stappen voor het instellen van de aanvraag. Het introduceert ook een querystructuur en legt uit hoe veldkenmerken en taalkundige analysen van invloed kunnen zijn op queryresultaten.

Vereisten

  • Een zoekindex met tekenreeksvelden die zijn toegeschreven als searchable.

  • Leesmachtigingen voor de zoekindex. Neem voor leestoegang een query-API-sleutel op voor de aanvraag of geef de aanroeper machtigingen voor de zoekindexgegevenslezer.

Voorbeeld van een queryaanvraag in volledige tekst

In Azure AI Search is een query een alleen-lezenaanvraag voor de docs-verzameling van één zoekindex, met parameters die de uitvoering van query's informeren en het antwoord vormgeven dat terugkomt.

Een volledige tekstquery wordt opgegeven in een search parameter en bestaat uit termen, tussen aanhalingstekens en operatoren. Andere parameters voegen meer definitie toe aan de aanvraag.

De volgende aanroep van de REST API van Search POST illustreert een queryaanvraag met behulp van de bovengenoemde parameters.

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"
}

Belangrijkste punten:

  • search biedt de criteria voor overeenkomsten, meestal hele termen of woordgroepen, met of zonder operatoren. Elk veld dat wordt toegeschreven als 'doorzoekbaar' in het indexschema, is een kandidaat voor deze parameter.

  • queryType stelt de parser in: simple, full. De standaard eenvoudige queryparser is optimaal voor zoeken in volledige tekst. De volledige Lucene-queryparser is bedoeld voor geavanceerde queryconstructies zoals reguliere expressies, nabijheid zoeken, fuzzy en jokertekens zoeken. Deze parameter kan ook worden ingesteld semantic op semantische classificatie voor geavanceerde semantische modellering in het queryantwoord.

  • searchMode geeft aan of overeenkomsten zijn gebaseerd op "alle" criteria (geeft precisie aan) of "any" criteria (favors recall) in de expressie. De standaardwaarde is 'any'. Als u verwacht dat booleaanse operatoren intensief worden gebruikt, wat waarschijnlijker is in indexen die grote tekstblokken bevatten (een inhoudsveld of lange beschrijvingen), moet u query's testen met de searchMode=Any|All parameter om de impact van die instelling op booleaanse zoekopdrachten te evalueren.

  • searchFields beperkt de uitvoering van query's tot specifieke doorzoekbare velden. Tijdens de ontwikkeling is het handig om dezelfde lijst met velden te gebruiken voor selecteren en zoeken. Anders is een overeenkomst mogelijk gebaseerd op veldwaarden die u niet in de resultaten kunt zien, waardoor er onzekerheid ontstaat over de reden waarom het document is geretourneerd.

Parameters die worden gebruikt om het antwoord vorm te geven:

  • select geeft aan welke velden moeten worden geretourneerd in het antwoord. Alleen velden die als 'ophaalbaar' in de index zijn gemarkeerd, kunnen worden gebruikt in een select-instructie.

  • top retourneert het opgegeven aantal best overeenkomende documenten. In dit voorbeeld worden slechts 10 treffers geretourneerd. U kunt de resultaten bovenaan gebruiken en overslaan (niet weergegeven).

  • count geeft aan hoeveel documenten in de hele index in het algemeen overeenkomen, wat meer kan zijn dan wat wordt geretourneerd.

  • orderby wordt gebruikt als u resultaten wilt sorteren op een waarde, zoals een classificatie of locatie. Anders wordt de relevantiescore standaard gebruikt om resultaten te rangschikken. Een veld moet worden toegeschreven als 'sorteerbaar' als kandidaat voor deze parameter.

Een client kiezen

Voor vroege ontwikkeling en proof-of-concept testen begint u met Azure Portal of een REST-client. Beide benaderingen zijn interactief, handig voor gerichte tests en helpen u bij het beoordelen van de effecten van verschillende eigenschappen zonder dat u code hoeft te schrijven.

Als u zoeken vanuit een app wilt aanroepen, gebruikt u de Azure.Document.Search-clientbibliotheken in de Azure SDK's voor .NET, Java, JavaScript en Python.

Wanneer u in de portal een index opent, kunt u met Search Explorer naast de JSON-indexdefinitie naast de index-JSON-definitie naast elkaar werken voor eenvoudige toegang tot veldkenmerken. Controleer de tabel Velden om te zien welke doorzoekbaar, sorteerbaar, filterbaar en facetable zijn tijdens het testen van query's.

  1. Meld u aan bij Azure Portal en zoek uw zoekservice.

  2. Open Indexen en selecteer een index.

  3. Er wordt een index geopend op het tabblad Search Explorer , zodat u direct query's kunt uitvoeren. Schakel over naar de JSON-weergave om de querysyntaxis op te geven.

    Hier volgt een zoekquery-expressie voor volledige tekst die werkt voor de voorbeeldindex Hotels:

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

    In de volgende schermopname ziet u de query en het antwoord:

    Screenshot of Search Explorer with a full text query.

Kies een querytype: eenvoudig | Volledige

Als uw query zoeken in volledige tekst is, wordt een queryparser gebruikt voor het verwerken van tekst die wordt doorgegeven als zoektermen en woordgroepen. Azure AI Search biedt twee queryparsers.

  • De eenvoudige parser begrijpt de eenvoudige querysyntaxis. Deze parser is geselecteerd als de standaardinstelling voor de snelheid en effectiviteit in vrije tekstquery's. De syntaxis ondersteunt veelgebruikte zoekoperators (EN, OF, NIET) voor zoekopdrachten in termen en woordgroepen, en voorvoegsel (*) zoeken (zoals in 'zee*' voor Seattle en Kust). Een algemene aanbeveling is om eerst de eenvoudige parser uit te proberen en vervolgens door te gaan naar de volledige parser als toepassingsvereisten vragen om krachtigere query's.

  • De volledige Lucene-querysyntaxis, ingeschakeld wanneer u aan de aanvraag toevoegt queryType=full , is gebaseerd op de Apache Lucene Parser.

Volledige syntaxis en eenvoudige syntaxis overlappen voor zover beide hetzelfde voorvoegsel en booleaanse bewerkingen ondersteunen, maar de volledige syntaxis biedt meer operators. Volledig zijn er meer operators voor Boole-expressies en meer operators voor geavanceerde query's, zoals fuzzy zoeken, zoeken met jokertekens, nabijheidszoekopdrachten en reguliere expressies.

Querymethoden kiezen

Zoeken is in wezen een gebruikersgestuurde oefening, waarbij termen of woordgroepen worden verzameld uit een zoekvak of van klikgebeurtenissen op een pagina. De volgende tabel bevat een overzicht van de mechanismen waarmee u gebruikersinvoer kunt verzamelen, samen met de verwachte zoekervaring.

Invoer Ervaring
Zoekmethode Een gebruiker typt de termen of woordgroepen in een zoekvak, met of zonder operators, en klikt op Zoeken om de aanvraag te verzenden. Zoeken kan worden gebruikt met filters voor dezelfde aanvraag, maar niet met automatisch aanvullen of suggesties.
Methode Automatisch aanvullen Een gebruiker typt een paar tekens en query's worden gestart nadat elk nieuw teken is getypt. Het antwoord is een voltooide tekenreeks uit de index. Als de opgegeven tekenreeks geldig is, klikt de gebruiker op Zoeken om die query naar de service te verzenden.
Methode Suggesties Net als bij automatisch aanvullen worden een gebruiker een paar tekens en incrementele query's gegenereerd. Het antwoord is een vervolgkeuzelijst met overeenkomende documenten, meestal vertegenwoordigd door enkele unieke of beschrijvende velden. Als een van de selecties geldig is, klikt de gebruiker op een selectie en wordt het overeenkomende document geretourneerd.
Facetnavigatie Een pagina toont klikbare navigatiekoppelingen of breadcrumbs die het bereik van de zoekopdracht beperken. Een facetnavigatiestructuur is dynamisch samengesteld op basis van een eerste query. Als u bijvoorbeeld search=* een facetnavigatiestructuur wilt vullen die bestaat uit elke mogelijke categorie. Er wordt een facetnavigatiestructuur gemaakt op basis van een queryantwoord, maar het is ook een mechanisme voor het uitdrukken van de volgende query. n REST API-verwijzing, facets wordt gedocumenteerd als een queryparameter van een bewerking Documenten zoeken, maar kan worden gebruikt zonder de search parameter.
Filtermethode Filters worden gebruikt met facetten om de resultaten te beperken. U kunt ook een filter achter de pagina implementeren, bijvoorbeeld om de pagina te initialiseren met taalspecifieke velden. In REST API-verwijzing $filter wordt beschreven als een queryparameter van een bewerking Documenten zoeken, maar kan deze worden gebruikt zonder de search parameter.

Effect van veldkenmerken op query's

Als u bekend bent met querytypen en -samenstelling, weet u misschien dat de parameters voor een queryaanvraag afhankelijk zijn van veldkenmerken in een index. Bijvoorbeeld: alleen velden die zijn gemarkeerd als searchable en retrievable kunnen worden gebruikt in query's en zoekresultaten. Wanneer u de searchparameters filteren orderby parameters in uw aanvraag instelt, moet u de kenmerken controleren om onverwachte resultaten te voorkomen.

In de onderstaande schermopname van de voorbeeldindex hotels zijn sortablealleen de laatste twee velden 'LastRenovationDate' en 'Rating' een vereiste voor gebruik in een "$orderby" enige component.

Index definition for the hotel sample

Zie Index maken (REST API) voor veldkenmerkdefinities.

Effect van tokens op query's

Tijdens het indexeren gebruikt de zoekmachine een tekstanalyse op tekenreeksen om het potentieel voor het vinden van een overeenkomst tijdens de query te maximaliseren. Tekenreeksen zijn minimaal kleine letters, maar afhankelijk van de analyse kunnen ook lemmatisatie ondergaan en het verwijderen van woorden stoppen. Grotere tekenreeksen of samengestelde woorden worden meestal opgesplitst door spaties, afbreekstreepjes of streepjes en geïndexeerd als afzonderlijke tokens.

Het punt om hier weg te nemen, is dat wat u denkt dat uw index bevat en wat er daadwerkelijk in zit, anders kan zijn. Als query's geen verwachte resultaten retourneren, kunt u de tokens inspecteren die door de analyse zijn gemaakt via de Analysetekst (REST API). Zie Gedeeltelijke zoektermen en patronen met speciale tekens voor meer informatie over tokenisatie en de impact op query's.

Volgende stappen

Nu u een beter inzicht hebt in hoe queryaanvragen werken, kunt u de volgende quickstarts uitproberen voor praktische ervaring.