Documenten zoeken (Azure Cognitive Search REST API)

Een queryaanvraag is gericht op de verzameling documenten van één index in een zoekservice. Het bevat parameters die de overeenkomstcriteria definiëren en parameters die het antwoord vormen.

U kunt GET of POST gebruiken. Queryparameters worden opgegeven in de queryreeks in het geval van GET-aanvragen en in de aanvraag body in het geval van POST-aanvragen.

GET https://[service name].search.windows.net/indexes/[index name]/docs?[query parameters] 
  Content-Type: application/json   
  api-key: [admin or query key]  
POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=[api-version]  
  Content-Type: application/json  
  api-key: [admin or query key]  

Wanneer de aanvraag wordt aangeroepen met GET, mag de lengte van de aanvraag-URL niet groter zijn dan 8 kB. Deze lengte is doorgaans voldoende voor de meeste toepassingen. Sommige toepassingen produceren echter zeer grote query's, met name wanneer OData-filterexpressie wordt gebruikt. Voor deze toepassingen is HTTP POST een betere keuze omdat er grotere filters zijn dan GET.

Met POST is het aantal componenten in een filter de beperkende factor, niet de grootte van de onbewerkte filterreeks, omdat de limiet voor de aanvraaggrootte voor POST ongeveer 16 MB is. Hoewel de limiet voor de grootte van de POST-aanvraag zeer groot is, kunnen filterexpressies niet willekeurig complex zijn. Zie OData Expression Syntax for Azure Cognitive Search (Syntaxis voor OData-expressies voor meer informatie over beperkingen van filtercomplexiteit).

URI-parameters

Parameter Beschrijving
[servicenaam] Vereist. Stel deze in op de unieke, door de gebruiker gedefinieerde naam van uw zoekservice.
[indexnaam]/docs Vereist. Hiermee geeft u de verzameling documenten van een benoemde index.
[queryparameters] Queryparameters worden opgegeven in de URI voor GET-aanvragen en in de aanvraag body voor POST-aanvragen.
api-versie Vereist. De huidige stabiele versie is api-version=2020-06-30 . Zie API-versies voor meer versies. Voor query's wordt de API-versie altijd opgegeven als een URI-parameter voor zowel GET als POST.

Aanbevelingen voor URL-codering

Vergeet niet om specifieke queryparameters url-codering toe te passen wanneer u de GET-REST API aanroept. Voor een bewerking Documenten zoeken kan URL-codering nodig zijn voor de volgende queryparameters:

  • zoeken
  • $filter
  • Facet
  • highlightPreTag
  • highlightPostTag

URL-codering wordt alleen aanbevolen voor afzonderlijke parameters. Als u per ongeluk de URL van de volledige queryreeks codeert (alles na ? de ), worden aanvragen onderbroken.

URL-codering is ook alleen nodig bij het rechtstreeks aanroepen van REST API met BEHULP van GET. Er is geen URL-codering nodig bij het gebruik van POST of bij het gebruik van de Azure Cognitive Search .NET-clientbibliotheek,waarmee codering voor u wordt verwerkt.

Aanvraagheaders

In de volgende tabel worden de vereiste en optionele aanvraagheaders beschreven.

Velden Beschrijving
Content-Type Vereist. Stel deze in op 'application/json'
api-key Vereist. Een unieke, door het systeem gegenereerde tekenreeks die de aanvraag verifieert bij uw zoekservice. Queryaanvragen op basis van de verzameling documenten kunnen een beheersleutel of querysleutel als API-sleutel opgeven. De querysleutel wordt gebruikt voor alleen-lezenbewerkingen voor de verzameling documenten. U vindt de API-sleutel in het dashboard van uw zoekservice in Azure Portal.

Aanvraagbody

Voor GET: Geen.

Voor POST:

{  
     "count": true | false (default),  
     "facets": [ "facet_expression_1", "facet_expression_2", ... ],  
     "filter": "odata_filter_expression",  
     "highlight": "highlight_field_1, highlight_field_2, ...",  
     "highlightPreTag": "pre_tag",  
     "highlightPostTag": "post_tag",  
     "minimumCoverage": # (% of index that must be covered to declare query successful; default 100),  
     "orderby": "orderby_expression",  
     "queryType": "simple" (default) | "full",
     "scoringParameters": [ "scoring_parameter_1", "scoring_parameter_2", ... ],  
     "scoringProfile": "scoring_profile_name",  
     "scoringStatistics" : "local" | "global",
     "search": "simple_query_expression",  
     "searchFields": "field_name_1, field_name_2, ...",  
     "searchMode": "any" (default) | "all",  
     "select": "field_name_1, field_name_2, ...",  
     "sessionId" : "session_id",
     "skip": # (default 0),  
     "top": #  
   }  

Voortzetting van gedeeltelijke zoekreacties

Soms Azure Cognitive Search niet alle aangevraagde resultaten in één Zoekopdracht-antwoord retourneren. Dit kan om verschillende redenen gebeuren, zoals wanneer de query te veel documenten aanvraagt door $top niet op te geven of een waarde op te geven voor $top die te groot is. In dergelijke gevallen bevat Azure Cognitive Search de aantekening in de antwoord-body en ook als @odata.nextLink @search.nextPageParameters het een POST-aanvraag was. U kunt de waarden van deze aantekeningen gebruiken om een andere Search-aanvraag te formuleren om het volgende deel van het zoekreactie op te halen. Dit wordt een vervolg van de oorspronkelijke Zoekopdracht-aanvraag genoemd en de aantekeningen worden doorgaans vervolgtokens genoemd. Zie het voorbeeld in Antwoord hieronder voor meer informatie over de syntaxis van deze aantekeningen en waar ze worden weergegeven in de antwoord body.

De redenen waarom Azure Cognitive Search vervolgtokens retourneren, zijn implementaties specifiek en kunnen worden gewijzigd. Robuuste clients moeten altijd gereed zijn voor het afhandelen van gevallen waarin minder documenten dan verwacht worden geretourneerd en een vervolg-token wordt opgenomen om door te gaan met het ophalen van documenten. Houd er ook rekening mee dat u dezelfde HTTP-methode moet gebruiken als de oorspronkelijke aanvraag om door te gaan. Als u bijvoorbeeld een GET-aanvraag hebt verzonden, moeten alle vervolgaanvragen die u verzendt ook GET gebruiken (en ook voor POST).

Notitie

Het doel van en is om de service te beschermen tegen query's die te veel resultaten aanvragen, niet om een algemeen mechanisme voor paginering @odata.nextLink @search.nextPageParameters te bieden. Als u resultaten wilt bekijken, gebruikt u $top en $skip elkaar. Als u bijvoorbeeld pagina's van grootte 10 wilt, moet uw eerste aanvraag $top=10 en $skip=0 hebben, moet de tweede aanvraag $top=1' en $skip=10 hebben, moet de derde aanvraag $top=10 en $skip=20 hebben, bijvoorbeeld.

Queryparameters

Een query accepteert verschillende parameters op de URL wanneer deze wordt aangeroepen met GET en als JSON-eigenschappen in de aanvraag body wanneer deze wordt aangeroepen met POST. De syntaxis voor sommige parameters is iets anders tussen GET en POST. Deze verschillen worden hieronder vermeld als van toepassing.

Naam Type Beschrijving
api-versie tekenreeks Vereist. Versie van de REST API gebruikt voor de aanvraag. Zie API-versies voor een lijst met ondersteunde versies. Voor deze bewerking wordt de API-versie opgegeven als een URI-parameter, ongeacht of u Documenten zoeken aanroept met GET of POST.
$count booleaans Optioneel. Geldige waarden zijn 'true' of 'false'. De standaardwaarde is 'false'. Wanneer deze parameter wordt aangeroepen met POST, wordt deze parameter count genoemd in plaats van $count. Hiermee geeft u op of het totale aantal resultaten moet worden opgehaald. Dit is het aantal documenten die overeenkomen met de zoek- en $filter parameters, waarbij $top en $skip. Als u deze waarde instelt op 'true', kunnen de prestaties verslechteren. Het geretourneerde aantal is een benadering. Als u alleen het aantal zonder documenten wilt, kunt u $top =0.
Facet tekenreeks Optioneel. Een veld om mee te facet. De tekenreeks kan parameters bevatten om de facetten aan te passen, uitgedrukt als door komma's gescheiden naam-waardeparen. Wanneer deze parameter wordt aangeroepen met POST, heeft deze de naam facets in plaats van facet.

Geldig zijn 'count', 'sort', 'values', 'interval' en 'timeoffset'.

'count' is het maximum aantal facettermen; de standaardwaarde is 10. Er is geen bovengrens voor het aantal termen, maar hogere waarden verslechteren de prestaties, met name als het facetveld een groot aantal unieke termen bevat. Met 'facet=category,count:5' worden bijvoorbeeld de top vijf categorieën in facetresultaten. Als de parameter count kleiner is dan het aantal unieke termen, zijn de resultaten mogelijk niet nauwkeurig. Dit komt door de manier waarop facetquery's worden verdeeld over shards. Het toenemende aantal verhoogt doorgaans de nauwkeurigheid van het aantal termijnen, maar tegen prestatiekosten.

"sort" kan worden ingesteld op "count", "-count", "value", "-value". Gebruik aantal om aflopend te sorteren op aantal. Gebruik -count om oplopend te sorteren op aantal. Gebruik waarde om oplopend op waarde te sorteren. Gebruik -value om aflopend te sorteren op waarde (bijvoorbeeld 'facet=category,count:3,sort:count' haalt de drie belangrijkste categorieën in facetresultaten op in aflopende volgorde op het aantal documenten met elke plaatsnaam). Als de drie belangrijkste categorieën Budget, Resort en Luxury zijn, en Budget 5 treffers heeft, Is er 6 en is Er zijn 4 categorieën voor Luxe, dan staan de buckets in de volgorde Voor, Budget, Luxe. Voor -value produceert 'facet=rating,sort:-value' buckets voor alle mogelijke classificaties, in aflopende volgorde op waarde (als de classificaties bijvoorbeeld van 1 tot 5 zijn, worden de buckets gesorteerd op 5, 4, 3, 2, 1, ongeacht hoeveel documenten overeenkomen met elke classificatie).

'values' kan worden ingesteld op door pipe-delimited numerieke waarden of Edm.DateTimeOffset-waarden die een dynamische set facetinvoerwaarden opgeven (bijvoorbeeld 'facet=baseRate,values:10 20' produceert drie buckets: één voor basissnelheid 0 tot en met 10, één voor 10 tot en met 20 en één voor | 20 en hoger). Een tekenreeks "facet=lastRenovationDate,values:2010-02-01T00:00:00Z" produceert twee buckets: één voor hotels die zijn ingericht vóór februari 2010 en één voor hotels die zijn ingericht op 1 februari 2010 of hoger.

'interval' is een geheel getalinterval dat groter is dan 0 voor getallen, of minuut, uur, dag, week, maand, kwartaal, jaar voor datum/tijd-waarden. 'facet=baseRate,interval:100' produceert bijvoorbeeld buckets op basis van basissnelheidsbereiken van grootte 100. Als basistarieven allemaal tussen $ 60 en $ 600 liggen, zijn er buckets voor 0-100, 100-200, 200-300, 300-400, 400-500 en 500-600. De tekenreeks "facet=lastRenovationDate,interval:year" produceert één bucket voor elk jaar waarin hotels zijn vernieuwd.

'timeoffset' kan worden ingesteld op ([+-]hh:mm, [+-]hhmm of [+-]hh). Als u deze parameter gebruikt, moet de timeoffset parameter worden gecombineerd met de intervaloptie en alleen wanneer toegepast op een veld van het type Edm.DateTimeOffset. De waarde geeft de UTC-tijds offset op om rekening mee te houden bij het instellen van tijdgrenzen. Bijvoorbeeld: "facet=lastRenovationDate,interval:day,timeoffset:-01:00" gebruikt de daggrens die begint bij 01:00:00 UTC (middernacht in de doeltijdzone).

count en sort kunnen worden gecombineerd in dezelfde facetspecificatie, maar ze kunnen niet worden gecombineerd met interval of waarden, en interval en waarden kunnen niet samen worden gecombineerd.

Interval-facetten op datum/tijd worden berekend op basis van de UTC-tijd als time-offset niet is opgegeven. Bijvoorbeeld: voor "facet=lastRenovationDate,interval:day" begint de daggrens om 00:00:00 UTC.
$filter tekenreeks Optioneel. Een gestructureerde zoekexpressie in de standaard OData-syntaxis. Alleen filterbare velden kunnen worden gebruikt in een filter. Bij het aanroepen met POST heeft deze parameter de naam filter in plaats van $filter. Zie OData-expressiesyntaxis Azure Cognitive Search voor meer informatie over de subset van de grammatica van de OData-expressie die Azure Cognitive Search ondersteunt.
Markeren tekenreeks Optioneel. Een set met door komma's gescheiden veldnamen die worden gebruikt voor de belangrijkste treffers. Alleen doorzoekbare velden kunnen worden gebruikt voor het markeren van treffers. Standaard retourneert Azure Cognitive Search maximaal 5 highlights per veld. De limiet kan per veld worden geconfigureerd door '-' toe te> de veldnaam. 'highlight=title-3,description-10' retourneert bijvoorbeeld maximaal 3 gemarkeerde treffers uit het titelveld en maximaal 10 treffers uit het beschrijvingsveld. Het maximum aantal highlights moet een geheel getal tussen 1 en 1000 zijn.
highlightPostTag tekenreeks Optioneel. De standaardwaarde is "</em>" . Een tekenreekstag die aan de gemarkeerde term wordt toevoegen. Moet worden ingesteld met highlightPreTag. Gereserveerde tekens in URL moeten in procenten zijn gecodeerd (bijvoorbeeld %23 in plaats van #).
highlightPreTag tekenreeks Optioneel. De standaardwaarde is "</em>" . Een tekenreekstag die wordt voorbereid op de gemarkeerde term. Moet worden ingesteld met highlightPostTag. Gereserveerde tekens in URL moeten in procenten zijn gecodeerd (bijvoorbeeld %23 in plaats van #).
minimumCoverage geheel getal Optioneel. Geldige waarden zijn een getal tussen 0 en 100, waarmee het percentage van de index wordt aangegeven dat beschikbaar moet zijn om de query te kunnen uitvoeren voordat deze als geslaagd kan worden gerapporteerd. De standaardwaarde is 100.

Een dekking van honderd procent betekent dat alle shards op de aanvraag hebben gereageerd (geen problemen met de service-status of verminderde dekking voor onderhoudsactiviteiten). Onder de standaardinstelling retournt minder dan volledige dekking DE HTTP-statuscode 503.

Het verlagen van minimumCoverage kan nuttig zijn als er 503-fouten optreden en u de kans op succes van de query wilt verhogen, met name voor services die zijn geconfigureerd voor één replica. Als u minimumCoverage instelt en Zoeken slaagt, wordt HTTP 200 als resultaat gegeven en wordt een waarde in het antwoord opgenomen waarmee het percentage van de index wordt aangegeven dat is opgenomen @search.coverage in de query. In dit scenario zijn niet alle overeenkomende documenten gegarandeerd aanwezig in de zoekresultaten, maar als de beschikbaarheid van zoekopdrachten belangrijker is dan relevante informatie, kan het verminderen van de dekking een levensvatbare risicobeperkingsstrategie zijn.
$orderby tekenreeks Optioneel. Een lijst met door komma's gescheiden expressies om de resultaten op te sorteren. Wanneer deze parameter wordt aangeroepen met POST, heeft deze de naam orderby in plaats van $orderby. Elke expressie kan een veldnaam of een aanroep van de functie geo.distance() zijn. Elke expressie kan worden gevolgd door 'asc' om oplopend aan te geven en 'desc' om aflopend aan te geven. Als er null-waarden in het sorteerveld staan, worden null-waarden eerst in oplopende volgorde en laatste in aflopende volgorde weergegeven. De standaardwaarde is oplopende volgorde. Ties worden verbroken door de overeenkomende scores van documenten. Als er $orderby opgegeven, wordt de standaardsorteer volgorde aflopend op de score van de documentmatch. Er is een limiet van 32 components voor $orderby.
Querytype tekenreeks Optioneel. Geldige waarden zijn 'eenvoudig' of 'vol'. De standaardwaarde is 'eenvoudig'.

'simple' interpreteert queryreeksen met behulp van de eenvoudige querysyntaxis waarmee symbolen zoals + en kunnen worden * "" gebruikt. Query's worden standaard geëvalueerd voor alle doorzoekbare velden (of velden die worden aangegeven in searchFields) in elk document.

'volledig' interpreteert queryreeksen met behulp van de volledige Lucene-querysyntaxis, waarmee veldspecifieke en gewogen zoekopdrachten mogelijk zijn. Bereik zoeken in de Lucene-querytaal wordt niet ondersteund in plaats van $filter die vergelijkbare functionaliteit biedt.
scoringParameter tekenreeks Optioneel. Geeft de waarden aan voor elke parameter die is gedefinieerd in een scoring-functie (zoals referencePointParameter) met behulp van de notatie 'name-value1,value2,...' Wanneer deze parameter wordt aangeroepen met POST, heet deze scoringParameters in plaats van scoringParameter. U geeft deze ook op als een JSON-matrix met tekenreeksen, waarbij elke tekenreeks een afzonderlijk naamwaardenpaar is.

Voor scoreprofielen die een functie bevatten, scheidt u de functie van de invoerlijst met een - teken. Een functie met de naam zou bijvoorbeeld "mylocation" '&scoringParameter=mylocation--122.2,44.8' zijn. Het eerste streepje scheidt de functienaam van de lijst met waarden, terwijl het tweede streepje deel uitmaakt van de eerste waarde (lengtegraad in dit voorbeeld).

Voor scoreparameters zoals voor tag boosting die komma's kunnen bevatten, kunt u dergelijke waarden in de lijst escapen met behulp van enkele aanhalingstekens. Als de waarden zelf enkele aanhalingstekens bevatten, kunt u deze escapen door ze te verdubbelen. Stel dat u een tag boosting-parameter hebt met de naam en u de "mytag" tagwaarden "Hello, O'Brien" en "Smith" wilt verbeteren. De optie voor de queryreeks zou dan '&scoringParameter=mytag-'Hello, O'Brien', Smith zijn. Aanhalingstekens zijn alleen vereist voor waarden die komma's bevatten.
scoringProfile tekenreeks Optioneel. De naam van een scoreprofiel om overeenkomende scores voor overeenkomende documenten te evalueren om de resultaten te sorteren.
scoringStatistics tekenreeks Optioneel. Geldige waarden zijn 'local' of 'global'. De standaardwaarde is 'local'. Geef op of scorestatistieken, zoals documentfrequentie, globaal (voor alle shards) moeten worden berekend voor een consistentere score of lokaal (op de huidige shard) voor een lagere latentie. Zie Scoring Statistics in Azure Cognitive Search. Scorestatistieken worden altijd lokaal berekend voor termen die fuzzy zoeken gebruiken ('~').
zoeken tekenreeks Optioneel. De tekst waar naar moet worden gezocht. Alle doorzoekbare velden worden standaard doorzocht, tenzij searchFields is opgegeven. In de index wordt tekst in een doorzoekbaar veld ge tokeniseerd, zodat meerdere termen kunnen worden gescheiden door witruimte (bijvoorbeeld: 'search=hello world'). Gebruik (dit kan handig zijn voor booleaanse filterquery's) om elke term * te vinden. Het weglaten van deze parameter heeft hetzelfde effect als het instellen op * . Zie Eenvoudige querysyntaxis voor specifieke informatie over de zoeksyntaxis.

Resultaten kunnen soms verrassend zijn bij het uitvoeren van query's op doorzoekbare velden. De tokenizer bevat logica voor het afhandelen van veelvoorkomende gevallen in Engelse tekst, zoals apostroofs, komma's in getallen, enzovoort. 'search=123.456' komt bijvoorbeeld overeen met één term '123.456' in plaats van de afzonderlijke termen '123' en '456', omdat komma's worden gebruikt als scheidingstekens voor grote getallen in het Engels. Daarom raden we u aan witruimte te gebruiken in plaats van leestekens om termen in de zoekparameter te scheiden.
searchMode tekenreeks Optioneel. Geldige waarden zijn 'any' of 'all' standaard ingesteld op 'any'. Hiermee geeft u op of een of alle zoektermen moeten worden gematcht om het document als overeenkomst te tellen.
searchFields tekenreeks Optioneel. De lijst met door komma's gescheiden veldnamen om te zoeken naar de opgegeven tekst. Doelvelden moeten worden gemarkeerd als doorzoekbaar in het indexschema.
$select tekenreeks Optioneel. Een lijst met door komma's gescheiden velden die moeten worden opgenomen in de resultatenset. Alleen velden die zijn gemarkeerd als ophaalbaar kunnen worden opgenomen in deze component. Als u niets opvraagt of is ingesteld op , worden alle velden die zijn gemarkeerd als ophaalbaar in het * schema opgenomen in de projectie. Wanneer deze parameter wordt aangeroepen met POST, heet deze select in plaats van $select.
Sessionid tekenreeks Optioneel. Het gebruik van sessionId helpt de consistentie van relevantiescores voor zoekservices met meerdere replica's te verbeteren. In configuraties met meerdere replica's kunnen er kleine verschillen zijn tussen relevantiescores van afzonderlijke documenten voor dezelfde query. Wanneer een sessie-id wordt opgegeven, doet de service er alles aan om een bepaalde aanvraag naar dezelfde replica voor die sessie te sturen. Wees op uw hoede dat het herhaaldelijk hergebruiken van dezelfde sessie-id-waarden de taakverdeling van de aanvragen over replica's kan verstoren en nadelige invloed kan hebben op de prestaties van de zoekservice. De waarde die wordt gebruikt als sessionId kan niet beginnen met een '_'-teken. Als een service geen replica's heeft, heeft deze parameter geen invloed op de prestaties of scoreconsistentie.
$skip geheel getal Optioneel. Het aantal zoekresultaten dat moet worden overgeslagen. Wanneer deze parameter wordt aangeroepen met POST, wordt deze de naam skip in plaats van $skip. Deze waarde mag niet groter zijn dan 100.000. Als u documenten op volgorde wilt scannen, maar $skip vanwege deze beperking niet kunt gebruiken, kunt u $orderby gebruiken voor een veld met unieke waarden voor elk document in de index (zoals de documentsleutel) en $filter met een bereikquery.
$top geheel getal Optioneel. Het aantal zoekresultaten dat moet worden opgehaald. Dit is standaard 50. Wanneer deze parameter wordt aangeroepen met POST, heeft deze de naam top in plaats van $top. Als u een waarde opgeeft die groter is dan 1000 en er meer dan 1000 resultaten zijn, worden alleen de eerste 1000 resultaten geretourneerd, samen met een koppeling naar de volgende pagina met resultaten (zie in het onderstaande @odata.nextLink voorbeeld).

Azure Cognitive Search gebruikt paginering aan de serverzijde om te voorkomen dat query's te veel documenten tegelijk ophalen. De standaardpaginagrootte is 50, terwijl de maximale paginagrootte 1000 is. Dit betekent dat documenten zoeken standaard uit meer dan 50 resultaten retourneert als u geen $top. Als er meer dan 50 resultaten zijn, bevat het antwoord informatie voor het ophalen van de volgende pagina van ten beste 50 resultaten (zie " " en " " in de @odata.nextLink @search.nextPageParameters onderstaande voorbeelden. En als u een waarde opgeeft die groter is dan 1000 voor $top en er meer dan 1000 resultaten zijn, worden alleen de eerste 1000 resultaten geretourneerd, samen met informatie voor het ophalen van de volgende pagina van ten meeste 1000 resultaten.

Antwoord

Statuscode: 200 OK wordt geretourneerd voor een geslaagd antwoord.

  {
    "@odata.count": # (if $count=true was provided in the query),
    "@search.coverage": # (if minimumCoverage was provided in the query),
    "@search.facets": { (if faceting was specified in the query)
      "facet_field": [
        {
          "value": facet_entry_value (for non-range facets),
          "from": facet_entry_value (for range facets),
          "to": facet_entry_value (for range facets),
          "count": number_of_documents
        }
      ],
      ...
    },
    "@search.nextPageParameters": { (request body to fetch the next page of results if not all results could be returned in this response and Search was called with POST)
      "count": ... (value from request body if present),
      "facets": ... (value from request body if present),
      "filter": ... (value from request body if present),
      "highlight": ... (value from request body if present),
      "highlightPreTag": ... (value from request body if present),
      "highlightPostTag": ... (value from request body if present),
      "minimumCoverage": ... (value from request body if present),
      "orderby": ... (value from request body if present),
      "scoringParameters": ... (value from request body if present),
      "scoringProfile": ... (value from request body if present),
      "scoringStatistics": ... (value from request body if present),
      "search": ... (value from request body if present),
      "searchFields": ... (value from request body if present),
      "searchMode": ... (value from request body if present),
      "select": ... (value from request body if present),
      "sessionId" : ... (value from request body if present),
      "skip": ... (page size plus value from request body if present),
      "top": ... (value from request body if present minus page size),
    },
    "value": [
      {
        "@search.score": document_score (if a text query was provided),
        "@search.highlights": {
          field_name: [ subset of text, ... ],
          ...
        },
        "@search.features": {
          "field_name": {
            "uniqueTokenMatches": feature_score,
            "similarityScore": feature_score,
            "termFrequency": feature_score,
          },
          ...
        },
        key_field_name: document_key,
        field_name: field_value (retrievable fields or specified projection),
        ...
      },
      ...
    ],
    "@odata.nextLink": (URL to fetch the next page of results if not all results could be returned in this response; Applies to both GET and POST)
  }

Voorbeelden

U vindt aanvullende voorbeelden in de OData-expressiesyntaxis voor Azure Cognitive Search.

  1. De index aflopend gesorteerd op datum doorzoeken:

    GET /indexes/hotels/docs?search=*&$orderby=LastRenovationDate desc&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "orderby": "LastRenovationDate desc"
        }  
    
  2. In een facetzoekactie zoekt u de index en haalt u facetten op voor categorieën, classificaties, tags, evenals items met baseRate in specifieke bereiken.

    GET /indexes/hotels/docs?search=*&facet=Category&facet=Rating&facet=Tags&facet=Rooms/BaseRate,values:80|150|220&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "test",  
          "facets": [ "Category", "Rating", "Tags", "Rooms/BaseRate,values:80|150|220" ]  
        }  
    

    U ziet dat het laatste facet zich in een subveld voordeed. Facetten tellen het bovenliggende document (Hotels) en niet tussenliggende subdocumenten (ruimten), dus het antwoord bepaalt het aantal hotels met een kamer in elke prijse bucket.

  3. Gebruik een filter om het vorige facetqueryresultaat te beperken nadat de gebruiker Classificatie 3 en categorie 'Filter' heeft geselecteerd.

    GET /indexes/hotels/docs?search=*&facet=tags&facet=Rooms/BaseRate,values:80|150|220&$filter=Rating eq 3 and Category eq 'Motel'&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "test",  
          "facets": [ "tags", "Rooms/BaseRate,values:80|150|220" ],  
          "filter": "Rating eq 3 and Category eq 'Motel'"  
        }  
    
  4. Stel in een facetzoekactie een bovengrens in voor unieke termen die in een query worden geretourneerd. De standaardwaarde is 10, maar u kunt deze waarde verhogen of verlagen met behulp van de count-parameter op het facetkenmerk. Dit voorbeeld retourneert facetten voor de stad, beperkt tot 5.

    GET /indexes/hotels/docs?search=*&facet=Address/City,count:5&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "test",  
          "facets": [ "Address/City,count:5" ]  
        }  
    
  5. Zoek de index binnen specifieke velden (bijvoorbeeld een taalveld):

    GET /indexes/hotels/docs?search=hôtel&searchFields=Description_fr&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "hôtel",  
          "searchFields": "Description_fr"
        }  
    
  6. Doorzoek de index in meerdere velden. U kunt bijvoorbeeld doorzoekbare velden in meerdere talen opslaan en er query's op uitvoeren, allemaal binnen dezelfde index. Als engelse en Franse beschrijvingen naast elkaar voorkomen in hetzelfde document, kunt u een of alle beschrijvingen in de queryresultaten retourneren:

    GET /indexes/hotels/docs?search=hotel&searchFields=Description,Description_fr&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "hotel",  
          "searchFields": "Description, Description_fr"
        }  
    

    U kunt alleen een query uitvoeren op de index tegelijk. Maak niet meerdere indexen voor elke taal, tenzij u van plan bent een query één voor één uit te voeren.

  7. Paginering: haal de eerste pagina met items op (paginaformaat is 10):

    GET /indexes/hotels/docs?search=*&$skip=0&$top=10&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "skip": 0,  
          "top": 10  
        }  
    
  8. Paginering: haal de tweede pagina met items op (paginaformaat is 10):

    GET /indexes/hotels/docs?search=*&$skip=10&$top=10&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "skip": 10,  
          "top": 10  
        }  
    
  9. Een specifieke set velden ophalen:

    GET /indexes/hotels/docs?search=*&$select=HotelName,Description&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "select": "HotelName, Description"
        }  
    
  10. Documenten ophalen die overeenkomen met een specifieke filterexpressie:

    GET /indexes/hotels/docs?$filter=(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "filter": "(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'"  
        }  
    
  11. Zoek de index en retourneert fragmenten met belangrijke treffers:

    GET /indexes/hotels/docs?search=something&highlight=Description&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "something",  
          "highlight": "Description"  
        }  
    
  12. Zoek in de index en retourneert documenten die zijn gesorteerd van dichter bij verder weg van een referentielocatie:

    GET /indexes/hotels/docs?search=something&$orderby=geo.distance(Location, geography'POINT(-122.12315 47.88121)')&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "something",  
          "orderby": "geo.distance(Location, geography'POINT(-122.12315 47.88121)')"
        }  
    
  13. Zoek in de index ervan uitgaande dat er een scoreprofiel met de naam 'geo' is met functies voor het scoren van twee afstanden, één met de naam 'currentLocation' en één met de naam 'lastLocation':

    GET /indexes/hotels/docs?search=something&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&scoringParameter=lastLocation--121.499,44.2113&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "something",  
          "scoringProfile": "geo",  
          "scoringParameters": [ "currentLocation--122.123,44.77233", "lastLocation--121.499,44.2113" ]  
        }  
    
  14. Documenten in de index zoeken met behulp van eenvoudige querysyntaxis. Deze query retourneert hotels waar doorzoekbare velden de termen 'comfort' en 'locatie' bevatten, maar niet 'hotels':

    Get /indexes/hotels/docs?search=comfort +location –motel&searchMode=all&api-version=22020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "comfort +location -motel",  
          "searchMode": "all"  
        }  
    

    Tip

    Het gebruik van searchMode=all overschrijven de standaardwaarde searchMode=any van , zodat dit 'AND NOT' betekent in plaats van -motel 'OR NOT'. Zonder searchMode=all krijgt u 'OR NOT', waarmee zoekresultaten worden uitgebreid in plaats van beperkt, en dit kan voor sommige gebruikers tegen intuïtief zijn.

  15. Documenten zoeken in de index met lucene-querysyntaxis). Deze query retourneert hotels waar het categorieveld de term 'budget' bevat en alle doorzoekbare velden met de zin 'recent renovatie'. Documenten met de zin 'recent recent vernieuwd' worden hoger geclassificeerd als gevolg van de term boost-waarde (3)

    GET /indexes/hotels/docs?search=Category:budget AND \"recently renovated\"^3&searchMode=all&api-version=2020-06-30&querytype=full` 
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
         "search": "Category:budget AND \"recently renovated\"^3",  
          "queryType": "full",  
          "searchMode": "all"  
    }  
    
  16. Zoek documenten in de index terwijl u de voorkeur geeft aan consistent scoren boven een lagere latentie. Deze query berekent de frequenties van documenten voor de hele index en doet er alles aan om dezelfde replica te richten op alle query's binnen dezelfde 'sessie', waardoor stabiele en reproduceerbare classificatie kan worden gegenereerd.

    GET /indexes/hotels/docs?search=hotel&sessionId=mySessionId&scoringStatistics=global&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "hotel",  
          "sessionId": "mySessionId",
          "scoringStatistics" :"global"
        }  
    

Zie ook