Sökdokument (REST API för Azure AI Search)

En frågebegäran riktar sig mot dokumentsamlingen för ett enda index i en söktjänst. Den innehåller parametrar som definierar matchningskriterierna och parametrar som formar svaret. Från och med API-versionen 2021-04-30-Preview kan du också använda ett indexalias för att rikta ett visst index i stället för att använda själva indexnamnet.

Du kan använda GET eller POST. Frågeparametrar anges i frågesträngen för GET-begäranden och i begärandetexten för POST-begäranden.

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

Om du använder POST lägger du till åtgärden "sök" som en URI-parameter.

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]  

När det anropas med GET får längden på begärande-URL:en inte överstiga 8 kB. Den här längden räcker vanligtvis för de flesta program. Vissa program skapar dock stora frågor, särskilt när OData-filteruttryck används. För dessa program är HTTP POST ett bättre alternativ eftersom det tillåter större filter än GET.

Med POST är antalet satser i ett filter den begränsande faktorn, inte storleken på den råa filtersträngen eftersom storleksgränsen för begäran för POST är cirka 16 MB. Även om storleksgränsen för POST-begäran är stor kan filteruttryck inte vara godtyckligt komplexa. Mer information om begränsningar för filterkomplexitet finns i OData-uttryckssyntax för Azure AI Search.

URI-parametrar

Parameter Beskrivning
[tjänstnamn] Krävs. Ange det unika, användardefinierade namnet på söktjänsten.
[indexnamn]/dokument Krävs. Anger dokumentsamlingen för ett namngivet index.
[frågeparametrar] Frågeparametrar anges på URI:n för GET-begäranden och i begärandetexten för POST-begäranden.
api-version Krävs. Den aktuella stabila versionen är api-version=2020-06-30. Se API-versioner för fler versioner. För frågor anges api-versionen alltid som en URI-parameter för både GET och POST.

Rekommendationer för URL-kodning

Kom ihåg att URL-koda specifika frågeparametrar när du anropar GET REST API direkt. För en åtgärd med sökdokument kan URL-kodning vara nödvändigt för följande frågeparametrar:

  • sök
  • $filter
  • Aspekt
  • highlightPreTag
  • highlightPostTag

URL-kodning rekommenderas endast för enskilda parametrar. Om du oavsiktligt URL-kodar hela frågesträngen (allt efter ?), avbryts begäranden.

Dessutom är URL-kodning endast nödvändigt när du anropar REST API direkt med GET. Ingen URL-kodning krävs när du använder POST, eller när du använder Azure AI Search .NET-klientbiblioteket, som hanterar kodning åt dig.

Rubriker för begäran

I följande tabell beskrivs nödvändiga och valfria begärandehuvuden.

Fält Description
Content-Type Krävs. Ställ in på "application/json"
api-key Valfritt om du använder Azure-roller och en ägartoken anges på begäran, annars krävs en nyckel. En API-nyckel är en unik, systemgenererad sträng som autentiserar begäran till söktjänsten. Frågebegäranden mot dokumentsamlingen kan ange antingen en administratörsnyckel eller en frågenyckel som API-nyckel. Frågenyckeln används för skrivskyddade åtgärder mot dokumentsamlingen. Mer information finns i Ansluta till Azure AI Search med nyckelautentisering .

Begärandetext

För GET: Ingen.

För 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": #  
   }  

Fortsättning på partiella söksvar

Ibland kan Azure AI Search inte returnera alla begärda resultat i ett enda söksvar. Detta kan inträffa av olika skäl, till exempel när frågan begär för många dokument genom att $top inte ange eller ange ett värde för som är för $top stort. I sådana fall innehåller Azure AI Search kommentaren @odata.nextLink i svarstexten och även @search.nextPageParameters om det var en POST-begäran. Du kan använda värdena för dessa anteckningar för att formulera en annan sökbegäran för att hämta nästa del av söksvaret. Detta kallas en fortsättning på den ursprungliga sökbegäran och anteckningarna kallas vanligtvis fortsättningstoken. Se exemplet i Svar nedan för mer information om syntaxen för dessa anteckningar och var de visas i svarstexten.

Orsakerna till att Azure AI Search kan returnera fortsättningstoken är implementeringsspecifika och kan komma att ändras. Robusta klienter bör alltid vara redo att hantera fall där färre dokument än förväntat returneras och en fortsättningstoken ingår för att fortsätta hämta dokument. Observera också att du måste använda samma HTTP-metod som den ursprungliga begäran för att kunna fortsätta. Om du till exempel har skickat en GET-begäran måste eventuella fortsättningsförfrågningar som du skickar också använda GET (och på samma sätt för POST).

Anteckning

Syftet med @odata.nextLink och @search.nextPageParameters är att skydda tjänsten från frågor som begär för många resultat, inte för att tillhandahålla en allmän mekanism för växling. Om du vill bläddra igenom resultat använder $top du och $skip tillsammans. Om du till exempel vill ha sidor med storlek 10 bör din första begäran ha $top=10 och $skip=0, den andra begäran ska ha $top=10 och $skip=10, den tredje begäran ska ha $top=10 och $skip=20, och så vidare.

Frågeparametrar

En fråga accepterar flera parametrar på URL:en när den anropas med GET och som JSON-egenskaper i begärandetexten när den anropas med POST. Syntaxen för vissa parametrar skiljer sig något mellan GET och POST. Dessa skillnader anges enligt vad som är tillämpligt nedan.

Namn Typ Description
api-version sträng Krävs. Version av REST-API:et som används för begäran. En lista över versioner som stöds finns i API-versioner. För den här åtgärden anges API-versionen som en URI-parameter oavsett om du anropar sökdokument med GET eller POST.
$count boolean Valfritt. Giltiga värden är "true" eller "false". Standardvärdet är "false". När den anropas med POST får den här parametern namnet count i stället för $count. Anger om det totala antalet resultat ska hämtas. Det här är antalet dokument som matchar sök- och $filter parametrar, ignorerar $top och $skip. Om du ställer in det här värdet på "true" kan prestanda försämras. Antalet är korrekt om indexet är stabilt, men kommer under eller överrapportera alla dokument som aktivt läggs till, uppdateras eller tas bort. Om du bara vill få antalet utan dokument kan du använda $top=0.
fasor eller fasor sträng Valfritt. Ett fält att fasettera efter, där fältet tilldelas som "facetable". När det anropas med GET facet är ett fält (facet: field1). När den anropas med POST namnges facets den här parametern i stället för facet och anges som en matris (facets: [field1, field2, field3]). Strängen kan innehålla parametrar för att anpassa fasettering, uttryckt som kommaavgränsade namn/värde-par.

Giltiga parametrar är "count", "sort", "values", "interval" och "timeoffset".

"count" är det maximala antalet fasetterade termer. standardvärdet är 10. Det finns ingen övre gräns för antalet termer, men högre värden försämrar prestanda, särskilt om det fasetterade fältet innehåller ett stort antal unika termer. Till exempel får "facet=category,count:5" de fem främsta kategorierna i fasetteringsresultat. Om parametern count är mindre än antalet unika termer kanske resultatet inte är korrekt. Detta beror på hur fasetteringsfrågor distribueras över shards. Du kan ange antal till noll eller till ett värde som är större än eller lika med antalet unika värden i det fasettbara fältet för att få ett korrekt antal över alla shards. Kompromissen är ökad svarstid.

"sort" kan anges till "count", "-count", "value", "-value". Använd count för att sortera fallande efter antal. Använd -count för att sortera stigande efter antal. Använd värdet för att sortera stigande efter värde. Använd -value för att sortera fallande efter värde (till exempel "facet=category,count:3,sort:count" hämtar de tre främsta kategorierna i fasetteringsresultat i fallande ordning efter antalet dokument med varje ortsnamn). Om de tre främsta kategorierna är Budget, Motel och Luxury och Budget har 5 träffar, Motel har 6 och Luxury har 4, är bucketarna i ordning Motel, Budget, Luxury. För -value skapar "facet=rating,sort:-value" buckets för alla möjliga klassificeringar, i fallande ordning efter värde (om klassificeringarna till exempel är från 1 till 5 sorteras bucketarna 5, 4, 3, 2, 1, oavsett hur många dokument som matchar varje klassificering).

"values" kan anges till pipe-avgränsade numeriska värden eller Edm.DateTimeOffset-värden som anger en dynamisk uppsättning fasettpostvärden (till exempel "facet=baseRate,values:10 | 20" producerar tre buckets: en för basränta 0 upp till men inte inklusive 10, en för 10 upp till men inte inklusive 20 och en för 20 och högre). Strängen "facet=lastRenovationDate,values:2010-02-01T00:00:00Z" producerar två buckets: en för hotell som renoverats före februari 2010 och en för hotell som renoverats den 1 februari 2010 eller senare. Värdena måste anges i sekventiell, stigande ordning för att få de förväntade resultaten.

"intervall" är ett heltalsintervall som är större än 0 för tal, eller minut, timme, dag, vecka, månad, kvartal, år för datumtidsvärden. Till exempel producerar "facet=baseRate,interval:100" buckets baserat på bashastighetsintervall med storleken 100. Om baspriserna är mellan 60 och 600 USD finns det bucketar för 0-100, 100-200, 200-300, 300-400, 400-500 och 500-600. Strängen "facet=lastRenovationDate,interval:year" producerar en bucket för varje år när hotellen renoverades.

"timeoffset" kan anges till ([+-]hh:mm, [+-]hhmm eller [+-]hh). Om den används måste parametern timeoffset kombineras med alternativet Intervall och endast när den tillämpas på ett fält av typen Edm.DateTimeOffset. Värdet anger UTC-tidsförskjutningen för att ta hänsyn till vid inställning av tidsgränser. Exempel: "facet=lastRenovationDate,interval:day,timeoffset:-01:00" använder daggränsen som börjar kl. 01:00:00 UTC (midnatt i måltidszonen).

count och sort kan kombineras i samma fasetteringsspecifikation, men de kan inte kombineras med intervall eller värden, och intervall och värden kan inte kombineras.

Intervallfasetter på datumtiden beräknas baserat på UTC-tiden om timeoffset inte anges. Till exempel: för "facet=lastRenovationDate,interval:day" börjar daggränsen kl. 00:00:00 UTC.
$filter sträng Valfritt. Ett strukturerat sökuttryck i OData-standardsyntax. Endast filterbara fält kan användas i ett filter. När du anropar med POST får den här parametern namnet filter i stället för $filter. Se OData-uttryckssyntax för Azure AI Search för mer information om delmängden av OData-uttryckets grammatik som stöds av Azure AI Search.
Markera sträng Valfritt. En uppsättning kommaavgränsade fältnamn som används för träffhöjdpunkter. Endast sökbara fält kan användas för träffmarkering. Som standard returnerar Azure AI Search upp till 5 höjdpunkter per fält. Gränsen kan konfigureras per fält genom att lägga till "-<max antal markeringar>" efter fältnamnet. Till exempel returnerar "highlight=title-3,description-10" upp till 3 markerade träffar från rubrikfältet och upp till 10 träffar från beskrivningsfältet. Det maximala antalet markeringar måste vara ett heltal mellan 1 och 1 000.
highlightPostTag sträng Valfritt. Standardvärdet är "</em>". En strängtagg som lägger till den markerade termen.. Måste anges med highlightPreTag. Reserverade tecken i URL:en måste vara procentkodade (till exempel %23 i stället för #).
highlightPreTag sträng Valfritt. Standardvärdet är "</em>". En strängtagg som förbereder den markerade termen. Måste anges med highlightPostTag. Reserverade tecken i URL:en måste vara procentkodade (till exempel %23 i stället för #).
minimumCoverage heltal Valfritt. Giltiga värden är ett tal mellan 0 och 100, vilket anger procentandelen av indexet som måste vara tillgängligt för att hantera frågan innan den kan rapporteras som lyckad. Standardvärdet är "100".

100 procents täckning innebär att alla shards svarade på begäran (varken servicehälsoproblem eller underhållsaktiviteter minskade täckningen). Under standardinställningen returnerar mindre än fullständig täckning HTTP-statuskod 503.

Att sänka minimumCoverage kan vara användbart om 503 fel inträffar och du vill öka sannolikheten för att frågan lyckas, särskilt för tjänster som har konfigurerats för en replik. Om du anger minimumCoverage och Sökningen lyckas returneras HTTP 200 och innehåller ett @search.coverage värde i svaret som anger procentandelen av indexet som ingick i frågan. I det här scenariot är det inte säkert att alla matchande dokument finns med i sökresultaten, men om söktillgängligheten är viktigare än träffsäkerhet kan det vara en användbar riskreduceringsstrategi att minska täckningen.
$orderby sträng Valfritt. En lista med kommaavgränsade uttryck som resultatet ska sorteras efter. När den anropas med POST heter den här parametern orderby i stället för $orderby. Varje uttryck kan vara antingen ett fältnamn eller ett anrop till funktionen geo.distance(). Varje uttryck kan följas av "asc" för att indikera stigande och "desc" för att indikera fallande. Om det finns null-värden i sorteringsfältet visas nullvärden först i stigande ordning och sist i fallande ordning. Standardvärdet är stigande ordning. Oavgjort kommer att brytas av matchningspoängen för dokument. Om ingen $orderby anges är standardsorteringsordningen fallande efter dokumentmatchningspoäng. Det finns en gräns på 32 satser för $orderby.
queryType sträng Valfritt. Giltiga värden är "enkla" eller "fullständiga". Standardvärdet är "enkelt".

"simple" tolkar frågesträngar med hjälp av den enkla frågesyntax som tillåter symboler som +, * och "". Frågor utvärderas i alla sökbara fält (eller fält som anges i searchFields) i varje dokument som standard.

"full" tolkar frågesträngar med hjälp av den fullständiga Lucene-frågesyntaxen som tillåter fältspecifika och viktade sökningar. Intervallsökning i Lucene-frågespråket stöds inte till förmån för $filter, som erbjuder liknande funktioner.
scoringParameter sträng Valfritt. Anger värdena för varje parameter som definierats i en bedömningsfunktion (till exempel referencePointParameter) med formatet "name-value1,value2,..." När den här parametern anropas med POST får den namnet scoringParameters i stället för scoringParameter. Du kan också ange den som en JSON-matris med strängar där varje sträng är ett separat namn/värde-par.

För bedömningsprofiler som innehåller en funktion separerar du funktionen från indatalistan med ett - tecken. En funktion med namnet "mylocation" skulle till exempel vara "&scoringParameter=mylocation--122.2,44.8". Det första strecket separerar funktionsnamnet från värdelistan, medan det andra strecket är en del av det första värdet (longitud i det här exemplet).

För bedömningsparametrar, till exempel för tagghöjande som kan innehålla kommatecken, kan du undvika sådana värden i listan med enkla citattecken. Om själva värdena innehåller enkla citattecken kan du undvika dem genom att fördubbla dem. Anta att du har en taggförstärkningsparameter som heter "mytag" och du vill öka taggvärdena "Hello, O'Brien" och "Smith", och att frågesträngsalternativet då skulle vara "&scoringParameter=mytag-'Hello, O''Brien',Smith". Citattecken krävs endast för värden som innehåller kommatecken.
scoringProfile sträng Valfritt. Namnet på en bedömningsprofil för att utvärdera matchningspoäng för matchande dokument för att sortera resultaten.
scoringStatistics sträng Valfritt. Giltiga värden är "lokala" eller "globala". Standardvärdet är "lokal". Ange om bedömningsstatistik ska beräknas, till exempel dokumentfrekvens, globalt (över alla shards) för mer konsekvent bedömning eller lokalt (på aktuell shard) för kortare svarstid. Se Bedömningsstatistik i Azure AI Search. Bedömningsstatistik beräknas alltid lokalt för termer som använder fuzzy-sökning (~).
sök sträng Valfritt. Texten att söka efter. Alla sökbara fält genomsöks som standard om inte searchFields har angetts. I indexet tokeniseras text i ett sökbart fält, så flera termer kan avgränsas med tomt utrymme (till exempel search=hello world). Om du vill matcha valfri term använder du * (detta kan vara användbart för booleska filterfrågor). Om du utelämnar den här parametern har samma effekt som att ange den till *. Mer information om söksyntaxen finns i Enkel frågesyntax .

Resultaten kan ibland vara överraskande när du frågar efter sökbara fält. Tokeniseraren innehåller logik för att hantera ärenden som är gemensamma för engelsk text som apostrofer, kommatecken i tal och så vidare. Till exempel matchar "search=123,456" en enda term "123,456" i stället för de enskilda termerna "123" och "456", eftersom kommatecken används som tusentalsavgränsare för stora tal på engelska. Därför rekommenderar vi att du använder blanksteg i stället för skiljetecken för att avgränsa termer i sökparametern.
searchMode sträng Valfritt. Giltiga värden är "any" eller "all" Defaults to "any". Anger om några eller alla söktermer måste matchas för att kunna räkna dokumentet som en matchning.
searchFields sträng Valfritt. Listan över kommaavgränsade fältnamn för att söka efter den angivna texten. Målfält måste markeras som sökbara i indexschemat.
$select sträng Valfritt. En lista över kommaavgränsade fält som ska inkluderas i resultatuppsättningen. Endast fält som markerats som hämtningsbara kan tas med i den här satsen. Om det är ospecificerat eller inställt på *inkluderas alla fält som markerats som hämtningsbara i schemat i projektionen. När den anropas med POST får den här parametern namnet select i stället för $select.
Sessionid sträng Valfritt. Med sessionId kan du förbättra relevanspoängkonsekvensen för söktjänster med flera repliker. I konfigurationer med flera repliker kan det finnas små skillnader mellan relevanspoäng för enskilda dokument för samma fråga. När ett sessions-ID tillhandahålls gör tjänsten sitt bästa för att dirigera en viss begäran till samma replik för den sessionen. Var försiktig med att återanvändning av samma sessions-ID-värden upprepade gånger kan störa belastningsutjämningen av begäranden över repliker och negativt påverka söktjänstens prestanda. Värdet som används som sessionId kan inte börja med ett _-tecken. Om en tjänst inte har några repliker har den här parametern ingen effekt på prestanda eller poängkonsekvens.
$skip heltal Valfritt. Antalet sökresultat som ska hoppa över. När den anropas med POST heter den här parametern hoppa över i stället för $skip. Det här värdet får inte vara större än 100 000. Om du behöver skanna dokument i följd, men inte kan använda $skip på grund av den här begränsningen, bör du överväga att använda $orderby i ett fält som har unika värden för varje dokument i indexet (till exempel dokumentnyckeln) och $filter med en intervallfråga i stället.
$top heltal Valfritt. Antalet sökresultat som ska hämtas. Detta är standardvärdet 50. När den anropas med POST får den här parametern namnet top i stället för $top. Om du anger ett värde som är större än 1 000 och det finns fler än 1 000 resultat returneras endast de första 1 000 resultaten, tillsammans med en länk till nästa resultatsida (se @odata.nextLink i exemplet nedan).

Azure AI Search använder växling på serversidan för att förhindra att frågor hämtar för många dokument samtidigt. Standardsidans storlek är 50, medan den maximala sidstorleken är 1 000. Det innebär att som standard returnerar sökdokument högst 50 resultat om du inte anger $top. Om det finns fler än 50 resultat innehåller svaret information för att hämta nästa sida med högst 50 resultat (se "@odata.nextLink" och "@search.nextPageParameters" i exemplen nedan. Om du anger ett värde som är större än 1 000 för $top och det finns fler än 1 000 resultat returneras bara de första 1 000 resultaten, tillsammans med information för att hämta nästa sida med högst 1 000 resultat.

Svarsåtgärder

Statuskod: 200 OK returneras för ett lyckat svar.

  {
    "@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)
  }

Exempel

Du hittar fler exempel i OData-uttryckssyntax för Azure AI Search.

  1. Sök i indexet sorterat fallande efter datum:

    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. I en fasanvänd sökning söker du i indexet och hämtar faser efter kategorier, klassificeringar, taggar och objekt med baseRate i specifika intervall.

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

    Observera att den sista aspekten finns i ett underfält. Fasor räknar det överordnade dokumentet (Hotell) och inte mellanliggande underdokument (Rum), så svaret bestämmer antalet hotell som har några rum i varje prisbucket.

  3. Använd ett filter och begränsa det tidigare faserade frågeresultatet när användaren har valt Omdöme 3 och kategorin "Motel".

    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. I en aspektisk sökning anger du en övre gräns för unika termer som returneras i en fråga. Standardvärdet är 10, men du kan öka eller minska det här värdet med hjälp av parametern count i attributet facet. Det här exemplet returnerar faser för stad, begränsat till 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. Sök i indexet i specifika fält (till exempel ett språkfält):

    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. Sök i indexet över flera fält. Du kan till exempel lagra och fråga sökbara fält på flera språk, allt inom samma index. Om engelska och franska beskrivningar samexisterar i samma dokument kan du returnera alla eller alla i frågeresultaten:

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

    Du kan bara fråga index åt gången. Skapa inte flera index för varje språk om du inte planerar att köra frågor mot ett i taget.

  7. Växling – Hämta den första sidan med objekt (sidstorleken är 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. Växling – Hämta den andra sidan med objekt (sidstorleken är 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. Hämta en specifik uppsättning fält:

    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. Hämta dokument som matchar ett specifikt filteruttryck:

    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. Sök i indexet och returnera fragment med träffhöjdpunkter:

    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. Sök i indexet och returnera dokument sorterade från närmare till längre bort från en referensplats:

    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. Sök i indexet förutsatt att det finns en bedömningsprofil som kallas "geo" med två avståndsbedömningsfunktioner, en som definierar en parameter med namnet "currentLocation" och en som definierar en parameter som kallas "lastLocation". I följande exempel har "currentLocation" en avgränsare av ett enda bindestreck (-). Den följs av longitud- och latitudkoordinater, där longitud är ett negativt värde.

    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. Hitta dokument i indexet med enkel frågesyntax. Den här frågan returnerar hotell där sökbara fält innehåller termerna "komfort" och "plats" men inte "motell":

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

    Tips

    Användningen av searchMode=all åsidosätter standardvärdet searchMode=any, vilket säkerställer att betyder -motel "AND NOT" i stället för "OR NOT". Utan searchMode=allfår du "OR NOT" som expanderar snarare än begränsar sökresultaten, och detta kan vara kontraintuitivt för vissa användare.

  15. Hitta dokument i indexet med lucene-frågesyntax). Den här frågan returnerar hotell där kategorifältet innehåller termen "budget" och alla sökbara fält som innehåller frasen "nyligen renoverad". Dokument som innehåller frasen "nyrenoverade" rangordnas högre som ett resultat av termen boost-värde (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. Hitta dokument i indexet samtidigt som konsekvent bedömning prioriteras framför kortare svarstider. Den här frågan beräknar dokumentfrekvenser i hela indexet och gör ett bästa försök att rikta in samma replik för alla frågor inom samma "session", vilket hjälper till att generera en stabil och reproducerbar rangordning.

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

Se även