Sök dokument (förhandsversion av REST API)

API-version: 2021-04-30-Preview, 2020-06-30-Preview

Viktigt

2021-04-30-Preview lägger till:

  • "semanticConfiguration" stöder omfångs-semantisk rangordning för specifika fält.
  • "captions" returnerar fraser som extraherats från viktiga avsnitt i de högst semantiskt rankade dokumenten.

2020-06-30-Preview lägger till:

  • "queryType=semantic" stöder semantisk omrankning och svar.
  • "speller" aktiverar stavningskorrigering vid frågeindata.
  • "queryLanguage" krävs för både "queryType=semantic" och "speller".
  • "featuresMode" packar upp en sökpoäng, rapporterar om termfrekvens per fält, likhetspoäng per fält och antal unika matchningar per fält.

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. Du kan 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 när det gäller GET-begäranden och i begärandetexten när det gäller 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 den anropas med GET får längden på begärande-URL:en inte överstiga 8 kB. Den här längden räcker 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 mycket stor kan filteruttryck inte vara godtyckligt komplexa. Mer information om begränsningar för filterkomplexitet finns i OData-uttryckssyntax för Azure Cognitive Search.

URI-parametrar

Parameter Beskrivning
[tjänstnamn] Krävs. Ange det här namnet till det unika, användardefinierade namnet på söktjänsten.
[indexnamn]/dokument Krävs. Anger dokumentsamlingen för ett namngivet index. Namnet på ett indexalias kan också användas i stället för indexnamnet.
[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 versionen är api-version=2021-04-30-Preview. Se API-versioner för fler versioner.

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
  • fasett
  • 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 HJÄLP av GET. Ingen URL-kodning krävs när du använder POST eller när du använder Azure Cognitive 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 Beskrivning
Content-Type Krävs. Ställ in på "application/json"
api-key Krävs. 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. Du hittar API-nyckeln på instrumentpanelen för söktjänsten i Azure Portal.

Begärandetext

För GET: Ingen.

För POST:

{  
     "answers": "none" (default) | "extractive", 
     "count": true | false (default),
     "captions": "none" (default) | "extractive",
     "facets": [ "facet_expression_1", "facet_expression_2", ... ],  
     "featuresMode" : "disabled" (default) | "enabled",
     "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",
     "queryLanguage": "en-us" (default) | (a supported language code), 
     "queryType": "simple" (default) | "full" | "semantic",
     "scoringParameters": [ "scoring_parameter_1", "scoring_parameter_2", ... ],  
     "scoringProfile": "scoring_profile_name",  
     "scoringStatistics" : "local" (default) | "global",
     "search": "simple_query_expression",  
     "searchFields": "field_name_1, field_name_2, ...",  
     "searchMode": "any" (default) | "all",  
     "select": "field_name_1, field_name_2, ...",  
     "semanticConfiguration": "semantic_configuration_name",
     "sessionId" : "session_id",
     "skip": # (default 0), 
     "speller": "none" (default) | "lexicon",  
     "top": #  
   }  

Fortsättning på partiella söksvar

Ibland kan Azure Cognitive 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 inte ange $top eller ange ett värde för $top som är för stort. I sådana fall inkluderar Azure Cognitive 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 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 Cognitive 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 du $top och $skip tillsammans. Om du till exempel vill ha sidor med storlek 10 ska 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 Beskrivning
svar (förhandsversion) sträng Valfritt. Giltiga värden är "none" och "extractive". Standardvärdet är "none". Den här parametern är endast giltig om frågetypen är "semantisk". När frågan är inställd på "extractive" formulerar och returnerar den svar från nyckelavsnitt i de högst semantiskt rankade dokumenten. Standardvärdet är ett svar, men du kan ange upp till 10 genom att lägga till ett antal. Till exempel returnerar "answers": "extractive|count-3" tre svar. För att ett svar ska returneras måste det finnas tillräckligt med information i searchFields för att formulera ett. Dessutom måste själva frågan se ut som en fråga. En nyckelordssökning returnerar inget svar.
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.
undertexter (förhandsversion) sträng Valfritt. Giltiga värden är "none" och "extractive". Standardvärdet är "none". Den här parametern är endast giltig om frågetypen är "semantisk". När den är inställd på "extractive" returnerar frågan undertexter som extraherats från nyckelpassagen i de högst rankade dokumenten. När undertexter är inställda på "extractive" är markering aktiverat som standard och kan konfigureras genom att lägga till pipe-tecknet "|" följt av alternativet "highlight-true</false>", till exempel "extractive|highlight-true".
$count boolean Valfritt. Giltiga värden är "true" eller "false". Standardvärdet är "false". När den här parametern anropas med POST får den 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 parametrarna och ignorerar $top och $skip. Om det här värdet anges till "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.
fasett sträng Valfritt. Ett fält att fasettera efter. Strängen kan innehålla parametrar för att anpassa fasettering, uttryckt som kommaavgränsade namn:värdepar. När den här parametern anropas med POST får den namnet fasetter i stället för fasetter.

Giltiga ä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 översta kategorierna är Budget, Motel och Luxury och Budget har 5 träffar, Motel har 6 och Luxury har 4, kommer bucketarna att vara i ordningen 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 parametern timeoffset används måste den 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å datumtid beräknas baserat på UTC-tiden om tidsförskjutningen inte har angetts. Till exempel: för "facet=lastRenovationDate,interval:day" börjar daggränsen kl. 00:00:00 UTC.
featuresMode (förhandsversion) boolean Valfritt. Giltiga värden är "aktiverade" och "inaktiverade". Standardvärdet är "inaktiverat". Ett värde som anger om resultatet ska innehålla frågeresultatfunktioner som används för att beräkna relevanspoängen för ett dokument i förhållande till frågan, till exempel likhet per fält. Använd "aktiverad" för att exponera fler frågeresultatfunktioner: likhetspoäng per fält, per fälttermfrekvens och antal unika token per fält som matchas. Mer information finns i Likhet och bedömning.
$filter sträng Valfritt. Ett strukturerat sökuttryck i OData-standardsyntax. Endast filterbara fält kan användas i ett filter. När den här parametern anropas med POST får den namnet filter i stället för $filter. Mer information om delmängden av OData-uttrycksmatiken som Azure Cognitive Search stöder finns i OData-uttryckssyntax för Azure Cognitive Search.
höjdpunkt 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 Cognitive Search upp till fem markeringar 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 tre 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 i 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 betjäna frågan innan den kan rapporteras som en framgång. Standardvärdet är "100".

100 procents täckning innebär att alla shards svarade på begäran (varken problem med tjänstens hälsotillstånd 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 Search lyckas returneras HTTP 200 och innehåller ett @search.coverage värde i svaret som anger procentandelen av indexet som inkluderades 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 att återkalla kan det vara en genomförbar åtgärdsstrategi att minska täckningen.
$orderby sträng Valfritt. En lista över kommaavgränsade uttryck som resultatet ska sorteras efter. När den anropas med POST får den här parametern namnet 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 null först i stigande ordning och sist i fallande ordning. Standardvärdet är stigande ordning. Banden kommer att brytas av matchningspoängen för dokument. Om ingen $orderby har angetts är standardsorteringsordningen fallande efter dokumentmatchningspoäng. Det finns en gräns på 32 satser för $orderby.
queryLanguage (förhandsversion) sträng Valfritt. Giltiga värden är ett språk som stöds. Standardvärdet är "en-us". Den här parametern måste anges om du använder antingen speller=lexicon eller queryType=semantic. Språket som anges i queryLanguage används för både stavningskontroll och av de semantiska modeller som ändrar resultat och extraherar en beskrivning eller ett svar. Biblioteken som används för queryLanguage är oberoende av andra språkbaserade fältattribut, till exempel språkanalysverktyg som används för indexering och fulltextsökning.
queryType sträng Valfritt. Giltiga värden är "enkla", "fullständiga" eller "semantiska" (förhandsversion). 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."

semantik" förbättrar precisionen i sökresultaten genom att rangordna om de 50 bästa matchningarna med hjälp av en rangordningsmodell som tränats på Bing-corpus för frågor som uttrycks på naturligt språk i stället för nyckelord. Om du anger frågetypen till semantisk måste du också ange queryLanguage och semanticConfiguration. Du kan också ange svar om du vill returnera de 3 främsta svaren om frågeindata formulerades på naturligt språk ("vad är en ...), och du kan också ange undertexter för att extrahera nyckelavsnitt från de högst rankade dokumenten.
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. Dessutom anger du 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 tagghöjningsparameter som heter "mytag" och du vill öka taggvärdena "Hello, O'Brien" och "Smith", så skulle frågesträngsalternativet då 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 Cognitive 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 här parametern anropas med POST får den namnet select i stället för $select.
semanticConfiguration (förhandsversion) sträng Valfritt. Krävs om queryType="semantik". Namnet på den semantiska konfigurationen som visar vilka fält som ska användas för semantisk rangordning, undertexter, markeringar och svar. Mer information finns i Skapa en semantisk fråga.
sessionId sträng Valfritt. Genom att använda 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 anges gör tjänsten bästa för att dirigera en viss begäran till samma replik för den sessionen. Var försiktig så att återanvändning av samma sessions-ID-värden upprepade gånger kan störa belastningsutjämningen av begäranden mellan 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 att hoppa över. När den här parametern anropas med POST får den namnet skip 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.
stavningskontroll (förhandsversion) Sträng Valfritt. Giltiga värden är "none" och "lexicon". Standardvärdet är "none". Förbättra träffsäkerheten genom att stavningsredigera enskilda sökord. Du kan använda den på enkla, fullständiga och semantiska frågetyper. Om den används kräver parametern speller queryLanguage. Mer information och exempel finns i Lägga till stavningskontroll i frågor.
$top heltal Valfritt. Antalet sökresultat som ska hämtas. Standardvärdet är 50. När den här parametern anropas med POST får den 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 Cognitive Search använder sidindelning på serversidan för att förhindra att frågor hämtar för många dokument samtidigt. Standardstorleken för sidan ä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. Det finns två exempelsvar i den här artikeln, ett för semantisk sökning och funktionerMode.

Exempelsvar för semantisk fråga

Det första exemplet visar det fullständiga svaret för det översta resultatet för den semantiska frågan "how do clouds form".

  • "@search.answers" visas när du anger svarsparametern och när frågan och underliggande searchFields bidrar till att skapa ett svar. Matrisen @search.answers som har en nyckel, text och markeringar. Poängen är en indikator på svarets styrka.

  • "value" är brödtexten i svaret. @search.rerankerScore tilldelas av den semantiska rangordningsalgoritmen och används för att rangordna resultat (@search.score kommer från BM25-likhetsalgoritmen, som används vid bedömning av de första resultaten). Undertexter omfattar oformaterad text och markerade versioner. Det här exemplet skapades med hjälp av OCR och entitetsigenkänning. Fält för det extraherade och sammanfogade innehållet ingår i svaret.

{
    "@search.answers": [
        {
            "key": "aHR0cHM6Ly9oZWlkaXN0YmxvYnN0b3JhZ2UuYmxvYi5jb3JlLndpbmRvd3MubmV0L25hc2EtZWJvb2stMS01MC9wYWdlLTQ1LnBkZg2",
            "text": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form where air is ascending (over land in this case),   but not where it is descending (over the river).",
            "highlights": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form<em> where air is ascending</em> (over land in this case),   but not where it is<em> descending</em> (over the river).",
            "score": 0.94639826
        }
    ],
    "value": [
        {
            "@search.score": 0.5479723,
            "@search.rerankerScore": 1.0321671911515296,
            "@search.captions": [
                {
                    "text": "Like all clouds, it forms when the air reaches its dew point—the temperature at    which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley fog, which is common in the Pacific Northwest of North America.",
                    "highlights": "Like all<em> clouds</em>, it<em> forms</em> when the air reaches its dew point—the temperature at    which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley<em> fog</em>, which is common in the Pacific Northwest of North America."
                }
            ],
            "content": "\nA\nT\n\nM\nO\n\nS\nP\n\nH\nE\n\nR\nE\n\nE\nA\n\nR\nT\n\nH\n\n34\n\nValley Fog\nCanada\n\nFog is essentially a cloud lying on the ground. Like all clouds, it forms when the air reaches its dew point—the temperature at  \n\nwhich an air mass is cool enough for its water vapor to condense into liquid droplets.\n\nThis false-color image shows valley fog, which is common in the Pacific Northwest of North America. On clear winter nights, the \n\nground and overlying air cool off rapidly, especially at high elevations. Cold air is denser than warm air, and it sinks down into the \n\nvalleys. The moist air in the valleys gets chilled to its dew point, and fog forms. If undisturbed by winds, such fog may persist for \n\ndays. The Terra satellite captured this image of foggy valleys northeast of Vancouver in February 2010.\n\n\n",
            "metadata_storage_path": "aHR0cHM6Ly9oZWlkaXN0YmxvYnN0b3JhZ2UuYmxvYi5jb3JlLndpbmRvd3MubmV0L25hc2EtZWJvb2stMS01MC9wYWdlLTQxLnBkZg2",
            "people": [],
            "locations": [
                "Pacific Northwest",
                "North America",
                "Vancouver"
            ],
            "merged_content": "\nA\nT\n\nM\nO\n\nS\nP\n\nH\nE\n\nR\nE\n\nE\nA\n\nR\nT\n\nH\n\n34\n\nValley Fog\nCanada\n\nFog is essentially a cloud lying on the ground. Like all clouds, it forms when the air reaches its dew point—the temperature at  \n\nwhich an air mass is cool enough for its water vapor to condense into liquid droplets.\n\nThis false-color image shows valley fog, which is common in the Pacific Northwest of North America. On clear winter nights, the \n\nground and overlying air cool off rapidly, especially at high elevations. Cold air is denser than warm air, and it sinks down into the \n\nvalleys. The moist air in the valleys gets chilled to its dew point, and fog forms. If undisturbed by winds, such fog may persist for \n\ndays. The Terra satellite captured this image of foggy valleys northeast of Vancouver in February 2010.\n\n\n",
            "text": [],
            "layoutText": []
        }

Exempelsvar för featuresMode

Det här exemplet visar "@search.features"-utdata från en fråga som innehåller featuresMode.

  {
    "@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),
      "featuresMode" : ... (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 Cognitive Search.

Exempel: enkel sökning

Hitta dokument i indexet med hjälp av 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=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "comfort +location -motel",  
      "searchMode": "all"  
    }  

Tips

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

Exempel: fullständig Lucene-sökning

Hitta dokument i indexet med Lucene-frågesyntax (se Lucene-frågesyntax i Azure Cognitive Search). 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 "nyligen renoverad" 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=2021-04-30-Preview&querytype=full`
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "Category:budget AND \"recently renovated\"^3",  
      "queryType": "full",  
      "searchMode": "all"  
}  

Exempel: semantisk sökning

Anropa den semantiska rankningsmodellen med svar, bildtexter och markerat innehåll. Svaret för den här frågan finns i föregående avsnitt.

POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
{
  "search": "how do clouds form",
  "queryType": "semantic",
  "semanticConfiguration": "my-semantic-config",
  "queryLanguage": "en-us",
  "answers": "extractive",
  "captions": "extractive",
  "count": "true"
}

Exempel: orderby

Sök i indexet och returnera resultat sorterade efter datum i fallande ordning.

GET /indexes/hotels/docs?search=*&$orderby=LastRenovationDate desc&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "orderby": "LastRenovationDate desc"
    }  

Exempel: filtrera med ett OData-uttryck

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=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "filter": "(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'"  
    }  

Exempel: fasetterad sökning

I en fasetterad sökning söker du i indexet och hämtar fasetter för kategorier, klassificeringar, taggar samt 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=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "test",  
      "facets": [ "Category", "Rating", "Tags", "Rooms/BaseRate,values:80|150|220" ]  
    }  

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

Exempel: Begränsa en fasetterad fråga

Använd ett filter och begränsa det tidigare fasetterade 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=2021-04-30-Preview  
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview 
    {  
      "search": "test",  
      "facets": [ "tags", "Rooms/BaseRate,values:80|150|220" ],  
      "filter": "Rating eq 3 and Category eq 'Motel'"  
    }  

Exempel: fasetterad sökning med gränser för varje kategori

I en fasetterad 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 för attributet facet. I det här exemplet returneras fasetter för stad, begränsade till 5.

GET /indexes/hotels/docs?search=*&facet=Address/City,count:5&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "test",  
      "facets": [ "Address/City,count:5" ]  
    }  

Exempel: sökning i fältet

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=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "hôtel",  
      "searchFields": "Description_fr"
    }  

Sök i indexet i 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 finns i samma dokument kan du returnera alla eller alla i frågeresultatet:

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

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

Exempel: sidindelningsresultat

Hämta den första sidan med objekt (sidstorleken är 10):

GET /indexes/hotels/docs?search=*&$skip=0&$top=10&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "skip": 0,  
      "top": 10  
    }  

Hämta den andra sidan med objekt (sidstorleken är 10):

GET /indexes/hotels/docs?search=*&$skip=10&$top=10&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "skip": 10,  
      "top": 10  
    }  

Exempel: begränsa fält i en resultatuppsättning

Hämta en specifik uppsättning fält:

GET /indexes/hotels/docs?search=*&$select=HotelName,Description&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "select": "HotelName, Description"
    }  

Exempel: träffmarkering i resultat

Sök i indexet och returnera fragment med träffhöjdpunkter:

GET /indexes/hotels/docs?search=something&highlight=Description&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "something",  
      "highlight": "Description"  
    }  

Exempel: Geospatial sökning

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=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "something",  
      "orderby": "geo.distance(Location, geography'POINT(-122.12315 47.88121)')"
    }  

Exempel: "hitta efter mig" (öka relevansen för närliggande platser

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

GET /indexes/hotels/docs?search=something&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&scoringParameter=lastLocation--121.499,44.2113&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "something",  
      "scoringProfile": "geo",  
      "scoringParameters": [ "currentLocation--122.123,44.77233", "lastLocation--121.499,44.2113" ]  
    }  

Exempel: fråga över fullständigt index i stället för shards

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 sitt bästa för att rikta samma replik för alla frågor inom samma "session", vilket bidrar till att generera en stabil och reproducerbar rangordning.

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

Exempel: bedömningsstatistik (featuresMode)

Hitta dokument i indexet och returnera en lista över informationshämtningsfunktioner för varje resultat som beskriver bedömningen mellan det matchade dokumentet och frågan. Frågan beräknar också dokumentfrekvenser i hela indexet för att skapa mer konsekvent bedömning.

GET /indexes/hotels/docs?search=hotel&featuresMode=enabled&scoringStatistics=global&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "hotel",  
      "featuresMode": "enabled",
      "scoringStatistics" :"global"
    }  

Ett exempel på ett svar som innehåller search.features ser ut ungefär så här:

    "@search.score": 0.91875637,
    "@search.features": {
        "Description": {
            "uniqueTokenMatches": 1,
            "similarityScore": 0.2917966,
            "termFrequency": 2
        },
        "HotelName": {
            "uniqueTokenMatches": 1,
            "similarityScore": 0.44458693,
            "termFrequency": 1
        }
      . . .

Definitioner

Det här avsnittet innehåller information om parametrar som är för komplexa att ta upp i huvudtabellen.

Länk Beskrivning
queryLanguage Lista över språk som stöds för stavning och semantisk sökning.

queryLanguage

Giltiga värden för parametern queryLanguage finns i följande tabell i kolumnen "queryLanguage" och är inte skiftlägeskänsliga. Standardvärdet för parametern som helhet är "en-us". Inom varje språk finns det en standardvariant för varje språkkod med två tecken. Om du till exempel anger "es" används "es-us" som standard. Parametern queryLanguage krävs för en frågebegäran som innehåller "queryType=semantic" eller "speller=lexicon". Det finns bara ett queryLanguage-värde för hela begäran och det värdet används för semantisk rangordning, undertexter, svar och stavning (det finns ingen åsidosättning för enskilda funktioner).

Just nu varierar språkstödet beroende på funktion. Endast engelska, spanska, franska och tyska stöds för den fullständiga uppsättningen funktioner, men observera att stavningskontroll implementerar färre varianter.

Om du anger en språkkod som inte stöds av en viss funktion, till exempel EN-GB med stavningskontroll, returnerar tjänsten HTTP 400.

Mer information om hur du använder varje funktion finns i Aktivera semantisk rangordning och undertexter, Returnera ett semantiskt svar och Lägg till stavningskontroll i frågor.

Beteckningen "(preview)" anger att valideringstestning för alla funktioner (semantisk rangordning, undertexter, svar och stavningskontroll) antingen är pågående eller väntande. Vi rekommenderar att du använder alla språkvarianter i följande tabell, men rekommenderar fler tester av förhandsversionsspråk för att säkerställa att resultatet är giltigt för ditt innehåll. Språk med grön kontroll och ingen förhandsgranskningsbeteckning har verifierats med motsvarande datamängder, med mätbar relevans.

Språk queryLanguage Semantisk rankning och undertexter Semantiskt svar Speller
Engelska [en] en, en-US (standard), en-GB, en-IN, en-CA, en-AU ✔️ ✔️ ✔️ (en, en-US)
Franska [fr] fr, fr-FR (standard), fr-CA ✔️ ✔️ ✔️ (fr, fr-FR)
Tyska [de] de, de-DE (standard) ✔️ ✔️ ✔️ (de, de-DE)
Spanska [es] es, es-ES (standard), es-MX ✔️ ✔️ ✔️ (es, es-ES)
Italienska [it] it-IT (standard) ✔️ ✔️
Japanska [ja] ja, ja-JP (standard) ✔️ ✔️ (förhandsversion)
Kinesiska [zh] zh, zh-CN (standard), zh-TW ✔️ ✔️ (förhandsversion)
Portugisiska [pt] pt, pt-BR (standard), pt-PT ✔️ ✔️ (förhandsversion)
Nederländska [nl] nl, nl-BE, nl-NL (standard) ✔️ (förhandsversion) ✔️ (förhandsversion) ✔️ (nl, nl-NL)
Arabiska [ar] ar, ar-SA (standard), ar-EG, ar-MA. ar-KW, ar-JO ✔️ (förhandsversion) ✔️ (förhandsversion)
Armeniska hy-AM (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Bangla bn-IN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Baskiska eu-ES (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Bulgariska [bg] bg, bg-BG (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Katalanska [ca] ca, ca-ES (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Kroatiska [hr] hr, hr-HR (standard), hr-BA ✔️ (förhandsversion) ✔️ (förhandsversion)
Tjeckiska [cs] cs, cs-CZ (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Danska [da] da, da-DK (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Estniska [et] et, et-EE (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Finska [fi] fi, fi-FI (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Galiciska gl-ES (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Grekiska [el] el, el-GR (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Gujarati gu-IN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Hebreiska he-IL (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Hindi [hi] hej, hi-IN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Ungerska [hu] hu, hu-HU (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Isländska [är] is, is-IS (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Indonesiska [id] id, id-ID (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Iriska ga-IE (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Kannada kn-IN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Koreanska [ko] ko, ko-KR (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Lettiska [lv] lv, lv-LV (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Litauiska [lt] lt, lt-LT (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Malayalam ml-IN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Malaysisk [ms] ms, ms-MY (standard), ms-BN ✔️ (förhandsversion) ✔️ (förhandsversion)
Marathi mr-IN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Norska [nej] no, no-NO (standard), nb-NO ✔️ (förhandsversion) ✔️ (förhandsversion)
Persiska fa-AE (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Polska [pl] pl, pl-PL (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Punjabi pa-IN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Rumänska [ro] ro, ro-RO (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Ryska [ru] ru, ru-RU (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Serbiska [sr] (kyrillisk eller latinsk) sr, sr-BA (standard), sr-ME, sr-RS ✔️ (förhandsversion) ✔️ (förhandsversion)
Slovakiska [sk] sk, sk-SK (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Slovenska [sl] sl, sl-SL (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Tamil [ta] ta, ta-IN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Svenska [sv] sv, sv-SE (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Telugu te-IN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Thailändska [th] th, th-TH (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Turkiska [tr] tr, tr-TR (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Ukrainska [uk] uk, uk-UA (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Urdu your-PK (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)
Vietnamesiska [va] va, vi-VN (standard) ✔️ (förhandsversion) ✔️ (förhandsversion)

Se även