Query's uitvoeren in Azure Cognitive Search

Azure Cognitive Search biedt een uitgebreide querytaal ter ondersteuning van een breed scala aan scenario's, van zoeken in vrije tekst tot zeer specifieke querypatronen. In dit artikel worden queryaanvragen beschreven en welke soorten query's u kunt maken.

In Cognitive Search is een query een volledige specificatie van een retourbewerking, met parameters die de uitvoering van de query informeren en de reactie vormgeven die search terugkomt. Parameters en parsers bepalen het type queryaanvraag. Het volgende queryvoorbeeld is een query met vrije tekst met een Booleaanse operator, met behulp van de zoekdocumenten (REST API), die is gericht op de verzameling hotels-sample-index documents.

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

Parameters die worden gebruikt tijdens het uitvoeren van query's zijn onder andere:

  • queryType stelt de parser in. Dit is de standaard eenvoudige queryparser (optimaal voor zoeken in volledige tekst) of de volledige Lucene-queryparser die wordt gebruikt voor geavanceerde query-constructies, zoals reguliere expressies, zoeken op nabijheid, fuzzy zoekopdrachten en zoekopdrachten met jokertekens, om er maar een paar te noemen.

  • searchMode geeft aan of overeenkomsten zijn gebaseerd op "alle" criteria of "een" criteria in de expressie. De standaardwaarde is any.

  • search biedt de overeenkomende criteria, meestal hele termen of zinnen, met of zonder operators. Elk veld dat in het indexschema als doorzoekbaar is toegewezen, is een kandidaat voor deze parameter.

  • 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 kan een overeenkomst worden gebaseerd op veldwaarden die u niet kunt zien in de resultaten, waardoor u niet zeker weet waarom het document is geretourneerd.

Parameters die worden gebruikt om het antwoord vorm te geven:

  • select geeft aan welke velden moeten worden retourneert in het antwoord. Alleen velden die zijn gemarkeerd als ophaalbaar in de index, 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 top gebruiken en overslaan (niet weergegeven) om de resultaten te bekijken.

  • count vertelt u hoeveel documenten in de hele index in totaal overeenkomen, wat meer kan zijn dan wat er wordt geretourneerd.

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

De bovenstaande lijst is representatief, maar niet volledig. Zie Documenten zoeken (REST API) voor de volledige lijst met parameters voor een queryaanvraag.

Typen query's

Met enkele belangrijke uitzonderingen wordt een queryaanvraag uitgevoerd op omgekeerde indexen die zijn gestructureerd voor snelle scans, waarbij een overeenkomst kan worden gevonden in mogelijk elk veld, binnen een aantal zoekdocumenten. In Cognitive Search is de primaire methodologie voor het zoeken naar overeenkomsten zoeken in volledige tekst of filters, maar u kunt ook andere bekende zoekervaringen implementeren, zoals automatisch aanvullen of zoeken op geografische locaties. In de rest van dit artikel vindt u een overzicht van query's in Cognitive Search en vindt u koppelingen naar meer informatie en voorbeelden.

Als uw zoek-app een zoekvak bevat waarmee terminvoer wordt verzameld, is zoeken in volledige tekst waarschijnlijk de querybewerking die deze ervaring aandondert. Zoeken in volledige tekst accepteert termen of zinnen die worden doorgegeven in een search parameter in alle doorzoekbare velden in uw index. Optionele Booleaanse operators in de queryreeks kunnen insluitings- of uitsluitingscriteria opgeven. Zowel de eenvoudige parser als de volledige parser ondersteunen zoeken in volledige tekst.

In Cognitive Search is zoeken in volledige tekst gebaseerd op de Apache Lucene-query-engine. Queryreeksen in zoekopdrachten in volledige tekst ondergaan lexicale analyse om scans efficiënter te maken. Analyse omvat het gebruik van kleine hoofdtermen, het verwijderen van stopwoorden zoals 'de' en het verminderen van termen tot primitieve hoofdformulieren. De standaardanalyse is Standard Lucene.

Wanneer overeenkomende termen worden gevonden, vervangt de query-engine een zoekdocument met de overeenkomst met behulp van de documentsleutel of id om veldwaarden samen te stellen, rangschikt de documenten op relevantie en retourneert de top 50 (standaard) in het antwoord of een ander getal als u hebt top opgegeven.

Als u zoeken in volledige tekst implementeert, kunt u door te begrijpen hoe uw inhoud wordt ge tokeniseerd, eventuele queryafwijkingen opsporen. Query's op tekenreeksen met afbreekstreepen of speciale tekens kunnen nodig zijn om een andere analyse dan de standaard Lucene-standaard te gebruiken om ervoor te zorgen dat de index de juiste tokens bevat. U kunt de standaardwaarde overschrijven met taalanalyses of gespecialiseerde analyses die lexicale analyse wijzigen. Een voorbeeld is een trefwoord dat de volledige inhoud van een veld als één token behandelt. Dit is handig voor gegevens zoals postcodes, ID's en enkele productnamen. Zie Partial term search and patterns with special characters (Gedeeltelijke zoektermen en patronen met speciale tekens) voor meer informatie.

Als u verwacht dat er veel Booleaanse operators worden gebruikt, wat waarschijnlijker is in indexen die grote tekstblokken bevatten (een inhoudsveld of lange beschrijvingen), moet u query's testen met de parameter om de impact van die instelling op booleaanse zoekopdrachten te searchMode=Any|All evalueren.

Automatisch aanvullen en voorgestelde query's

Automatisch aanvullen of voorgestelde resultaten zijn alternatieven voor het uitvoeren van opeenvolgende queryaanvragen op basis van gedeeltelijke tekenreeksinvoer (na elk teken) in een search zoek-als-u-type-ervaring. U kunt de autocomplete parameters en samen of afzonderlijk gebruiken, zoals beschreven in deze zelfstudie , maar u kunt suggestions ze niet gebruiken met search . Zowel voltooide termen als voorgestelde query's worden afgeleid van de inhoud van de index. De engine retourneert nooit een tekenreeks of suggestie die niet aanwezig is in uw index. Zie Automatisch aanvullen (REST API) en Suggesties (REST API) voor meer informatie.

Filters worden veel gebruikt in apps met Cognitive Search. Op toepassingspagina's worden filters vaak gevisualiseerd als facetten in koppelingsnavigatiestructuren voor door de gebruiker gerichte filtering. Filters worden ook intern gebruikt om segmenten van geïndexeerde inhoud weer te geven. U kunt bijvoorbeeld een zoekpagina initialiseren met behulp van een filter op een productcategorie of een taal als een index velden in zowel het Engels als het Frans bevat.

Mogelijk hebt u ook filters nodig om een speciaal queryformulier aan te roepen, zoals beschreven in de volgende tabel. U kunt een filter gebruiken met een niet-gespecificeerde zoekopdracht ( ) of met een queryreeks die search=* termen, zinnen, operators en patronen bevat.

Filterscenario Description
Bereikfilters In Azure Cognitive Search worden bereikquery's gebouwd met behulp van de filterparameter. Zie Voorbeeld van bereikfilter voor meer informatie en voorbeelden.
Zoeken op geografische locatie Als een doorzoekbaar veld van het type Edm.GeographyPointis, kunt u een filterexpressie maken voor zoeken in de buurt of op kaarten gebaseerde zoekbesturingselementen. Velden die geozoekactie mogelijk maken, bevatten coördinaten. Zie geozoekvoorbeeld voor meer informatie en een voorbeeld.
Facetnavigatie In de facetnavigatiestructuur kunnen gebruikers facetten selecteren, zodat de resultaten bij elke klik worden beperkt. Elk facet wordt geback-by door een filter dat documenten uitsluit die niet meer aan de criteria voldoen.

Notitie

Tekst die wordt gebruikt in een filterexpressie wordt niet geanalyseerd tijdens het verwerken van query's. De tekstinvoer wordt verondersteld een verbatim hoofdtekstgevoelig tekenpatroon te zijn dat slaagt of mislukt bij de overeenkomst. Filterexpressie wordt samengesteld met behulp van de OData-syntaxis en doorgegeven in een filter parameter in alle filterbare velden in uw index. Zie Filters in Azure Cognitive Search voor meer informatie.

Document ops zoeken

In tegenstelling tot de eerder beschreven queryformulieren wordt hiermee één zoekdocument opgehaald op basis van id,zonder bijbehorende zoekopdracht of scan in de index. Er wordt slechts één document aangevraagd en geretourneerd. Wanneer een gebruiker een item in de zoekresultaten selecteert, is het ophalen van het document en het vullen van een detailpagina met velden een typisch antwoord. Een documentzoekbewerking is de bewerking die dit ondersteunt.

Geavanceerd zoeken: fuzzy, jokertekens, nabijheid, regex

Een geavanceerd queryformulier is afhankelijk van de volledige Lucene-parser en operators die een specifiek querygedrag activeren.

Querytype Gebruik Voorbeelden en meer informatie
Veldzoekactie search Parameter queryType=full Bouw een samengestelde queryexpressie die is gericht op één veld.
Voorbeeld van een veldzoekactie
fuzzy zoeken search Parameter queryType=full Komt overeen met termen met een vergelijkbare constructie of spelling.
Voorbeeld van fuzzy zoekopdrachten
zoeken op nabijheid search Parameter queryType=full Zoekt termen die dicht bij elkaar liggen in een document.
Voorbeeld van zoeken op nabijheid
term boosting search Parameter queryType=full Rangschikt een document hoger als het de boost-term bevat, ten opzichte van anderen die dat niet doen.
Voorbeeld van een term die een boost geeft
zoeken in reguliere expressies search Parameter queryType=full Komt overeen op basis van de inhoud van een reguliere expressie.
Voorbeeld van reguliere expressie
zoeken met jokertekens of voorvoegsels search parameter met * ~ of ? , queryType=full Komt overeen met een voorvoegsel en tilde ( ~ ) of één teken ( ? ).
Voorbeeld van zoeken met jokertekens

Volgende stappen

Bekijk de voorbeelden voor elke syntaxis voor een beter overzicht van de implementatie van query's. Als u geen tijd hebt voor zoeken in volledige tekst, is een beter overzicht van wat de query-engine doet misschien net zo goed.