Lucene-frågesyntax i Azure AI-sökning

Note

Azure AI-sökning är tillgängligt via Azure-portalen, REST-API:er och Azure-SDK:er. Den ligger också till grund för Foundry IQ, det hanterade kunskapsskiktet som omvandlar företagsinnehåll till återanvändbara, behörighetsmedvetna kunskapsbaser för agenter i Microsoft Foundry-portalen.

När du skapar frågor i Azure AI-sökning kan du välja den fullständiga Lucene Query Parser-syntaxen för specialiserade frågeformulär: jokertecken, fuzzy-sökning, närhetssökning, reguljära uttryck. Mycket av Lucene Query Parser-syntaxen implementeras intakt i Azure AI-sökning, förutom intervallsökningar som skapas via $filter uttryck.

Om du vill använda fullständig Lucene-syntax anger du queryType till full och skickar ett frågeuttryck mönstrat för jokertecken, fuzzy-sökning eller något av de andra frågeformulär som stöds av den fullständiga syntaxen. I REST tillhandahålls frågeuttryck i parametern search för en REST API-begäran (Search Documents).

Exempel (fullständig syntax)

Följande exempel är en sökbegäran som skapats med hjälp av den fullständiga syntaxen. Det här exemplet visar fältsökning och frasförstärkning. Den söker efter hotell där kategorifältet innehåller termen budget. Dokument som innehåller frasen "recently renovated" får extra boostvikt och kan rangordnas högre som ett resultat av frasen boost value (3).

POST /indexes/hotels-sample/docs/search?api-version=2026-04-01
{
  "queryType": "full",
  "search": "category:budget AND \"recently renovated\"^3",
  "searchMode": "all"
}

Även om parametern inte är specifik för någon frågetyp är den searchMode relevant i det här exemplet. När operatorerna är på frågan bör du vanligtvis ange searchMode=all för att säkerställa att alla kriterier matchas.

Fler exempel finns i Exempel på Lucene-frågesyntax. Mer information om frågebegäran och parametrar, inklusive searchMode, finns i Sökdokument (REST API).

Grunderna i syntax

Följande syntaxgrunder gäller för alla frågor som använder Lucene-syntaxen.

Operatörsutvärdering i kontext

Placering avgör om en symbol tolkas som en operator eller bara ett annat tecken i en sträng.

I Lucene-full syntax används till exempel tilde (~) för både fuzzy-sökning och närhetssökning. När den placeras efter en citerad fras ~ anropas närhetssökning. När den placeras i slutet av en term utlöser ~ en fuzzy-sökning.

Inom en term, till exempel business~analyst, utvärderas inte tecknet som en operator. I det här fallet, förutsatt att frågan är en term eller frasfråga, tar fulltextsökning med lexikal analys bort ~ och bryter termen business~analyst i två: business ELLER analyst.

Exemplet ovan är tilde (~), men samma princip gäller för varje operator.

Säkerställa specialtecken

Om du vill använda någon av sökoperatorerna som en del av söktexten kan du undvika tecknet genom att prefixa det med ett enda omvänt snedstreck (\). Till exempel, för en jokerteckensökning på https://, där :// är en del av frågesträngen, anger du search=https\:\/\/*. På samma sätt kan ett undantaget telefonnummermönster se ut så här \+1 \(800\) 642\-7676.

Exempel på specialtecken som kräver escapning är följande:
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /

Note

Även om "escaping" håller ihop tokens, kan lexikalisk analys under indexeringen ta bort dem. Till exempel kommer standardanalysatorn i Lucene att bryta ord på bindestreck, blanksteg och andra tecken. Om du behöver specialtecken i frågesträngen kan du behöva en analysator som bevarar dem i indexet. Vissa alternativ inkluderar Microsofts analysverktyg för naturligt språk, som bevarar bindestreckade ord, eller en anpassad analysator för mer komplexa mönster. Mer information finns i Partiella termer, mönster och specialtecken.

Koda osäkra och reserverade tecken i URL:er

Se till att alla osäkra och reserverade tecken kodas i en URL. Är till exempel # ett osäkert tecken eftersom det är en fragment-/fästpunktsidentifierare i en URL. Tecknet måste kodas till %23 om det används i en URL. & och = är exempel på reserverade tecken eftersom de avgränsar parametrar och anger värden i Azure AI-sökning. Mer information finns i RFC1738: Uniform Resource Locators (URL).

Osäkra tecken är " ` < > # % { } | \ ^ ~ [ ]. Reserverade tecken är ; / ? : @ = + &.

Booleska operatorer

Du kan bädda in booleska operatorer i en frågesträng för att förbättra precisionen för en matchning. Den fullständiga syntaxen stöder textoperatorer utöver teckenoperatorer. Ange alltid booleska textoperatorer (AND, OR, NOT) i versala bokstäver.

Textoperatör Character Example Usage
AND + wifi AND luxury Anger termer som en matchning måste innehålla. I exemplet söker frågemotorn efter dokument som innehåller både wifi och luxury. Plustecknet (+) kan också användas direkt framför en term för att göra det nödvändigt. Stipulerar till exempel +wifi +luxury att båda termerna måste visas någonstans i fältet i ett enda dokument.
OR (ingen) 1 wifi OR luxury Hittar en matchning när någon av termerna hittas. I exemplet returnerar frågemotorn matchningar i dokument som innehåller antingen wifi eller luxury båda. Med searchMode=anyär OR standardkonjunktionsoperatorn, så wifi luxury det motsvarar wifi OR luxury. Med searchMode=allanvänder du den explicita OR operatorn för att hämta det här beteendet.
NOT !, - wifi –luxury Returnerar en matchning för dokument som exkluderar termen. Till exempel söker wifi –luxury efter dokument som har termen wifi men inte luxury.

1 Tecknet | stöds inte för OR-åtgärder.

INTE boolesk operator

Important

OPERATORN NOT (NOT, !, eller -) beter sig annorlunda i fullständig syntax än i enkel syntax.

  • I enkel syntax läggs alltid ett jokertecken automatiskt till i sökfrågor med negation. Frågan -luxury expanderas till exempel automatiskt till -luxury *.
  • I fullständig syntax kan frågor med negation inte kombineras med ett jokertecken. Till exempel är förfrågningar som -luxury * inte tillåtna.
  • I fullständig syntax tillåts inte frågor med en enda negation. Frågan -luxury är till exempel inte tillåten.
  • Med fullständig syntax fungerar negationer som om de alltid AND-kopplas till sökfrågan, oavsett sökläge.
    • Till exempel hämtar den fullständiga syntaxfrågan wifi -luxury i fullständig syntax endast dokument som innehåller termen wifioch tillämpar sedan negationen -luxury på dessa dokument.
  • Om du vill använda negationer för att söka efter alla dokument i indexet rekommenderas enkel syntax med any sökläget.
  • Om du vill använda negationer för att söka över en delmängd dokument i indexet rekommenderas fullständig syntax eller enkel syntax med alla söklägen.
Frågetyp Sökläge Exempelfråga Behavior
Simple any wifi -luxury Returnerar alla dokument i indexet. Dokument med termen "wifi" eller dokument som saknar termen "lyx" rangordnas högre än andra dokument. Frågan expanderas till wifi OR -luxury OR *.
Simple all wifi -luxury Returnerar endast dokument i indexet som innehåller termen "wifi" och innehåller inte termen "lyx". Frågan expanderas till wifi AND -luxury AND *.
Full any wifi -luxury Returnerar endast dokument i indexet som innehåller termen "wifi" och sedan tas dokument som innehåller termen "lyx" bort från resultaten.
Full all wifi -luxury Returnerar endast dokument i indexet som innehåller termen "wifi" och sedan tas dokument som innehåller termen "lyx" bort från resultaten.

Fältsökning

Du kan definiera en fältsökningsåtgärd med syntaxen fieldName:searchExpression , där sökuttrycket kan vara ett enda ord eller en fras, eller ett mer komplext uttryck inom parenteser, eventuellt med booleska operatorer. Några exempel är följande:

  • genre:jazz NOT history

  • artists:("Miles Davis" "John Coltrane")

Se till att placera flera strängar inom citattecken om du vill att båda strängarna ska utvärderas som en enda entitet, i det här fallet söker du efter två distinkta konstnärer i fältet artists .

Fältet som anges i fieldName:searchExpression måste vara ett searchable fält. Mer information om hur indexattribut används i fältdefinitioner finns i Skapa index .

Note

När du använder fältsökuttryck behöver du inte använda parametern searchFields eftersom varje fältsökuttryck uttryckligen har ett fältnamn angivet. Du kan dock fortfarande använda parametern searchFields om du vill köra en fråga där vissa delar är begränsade till ett visst fält och resten kan gälla för flera fält. Frågan search=genre:jazz NOT history&searchFields=description skulle till exempel matcha endast jazz med fältet genre, medan den skulle matcha NOT history med fältet description. Fältnamnet som anges i fieldName:searchExpression har alltid företräde framför parametern searchFields , vilket är anledningen till att vi i det här exemplet inte behöver inkludera genre i parametern searchFields .

Fuzzy-sökning

En fuzzy-sökning hittar matchningar i termer som har en liknande konstruktion och expanderar en term upp till högst 50 termer som uppfyller avståndskriterierna för två eller mindre. Mer information finns i Fuzzy-sökning.

Om du vill göra en fuzzy-sökning använder du tilde-symbolen ~ i slutet av ett enda ord med en valfri parameter, ett tal mellan 0 och 2 (standard), som anger redigeringsavståndet. Till exempel, blue~ eller blue~1 skulle returnera blue, bluesoch glue.

Fuzzy-sökning kan endast tillämpas på termer, inte på fraser omslutna av citattecken, men du kan lägga till en tilde till varje term individuellt i ett namn eller en fras med flera delar. Exempelvis skulle Unviersty~ of~ Wshington~ matcha med University of Washington.

Närhetssökning

Närhetssökningar används för att hitta termer som ligger nära varandra i ett dokument. Infoga en tilde-symbol ~ i slutet av en fras följt av antalet ord som skapar närhetsgränsen. Hittar till exempel "hotel airport"~5 termerna hotel och airport inom fem ord från varandra i ett dokument.

Termförstärkning

Tänk på sökning som två steg. Först hittar Azure AI-sökning matchande dokument. Sedan rangordnas dessa matchningar. Termhöjande påverkar bara det andra steget: det kan flytta dokument som matchar en del av din fråga högre i resultatet.

Boostning av termer skiljer sig från en poängsättningsprofil. En boost gynnar ett ord, en fras eller en grupp i den aktuella frågan. En bedömningsprofil gynnar fält eller annat indexinnehåll enligt regler som definierats i indexet.

Öka omfång

Skriv ett cirkumflextecken (^) och ett positivt tal omedelbart efter den del av frågan som du vill framhäva. tax^2 kan till exempel flytta dokument som innehåller tax högre än dokument som bara matchar en oboostad term. Standardvärdet för boost är 1. Du kan också använda ett värde mellan 0 och 1, till exempel 0.2, för att ge en matchning mindre vikt.

Interpunktionen anger vilka ord varje instruktion påverkar:

  • Ett fältnamn plus ett kolon, kallat fältprefix, visas före ett ord, en citerad fras eller en parentesgrupp. Till exempel anger content: för Azure AI-sökning att söka i fältet content.
  • En boost, till exempel ^2, visas efter ett ord, en citerad fras eller en parentesgrupp. Den talar om för Azure AI-sökning vad som ska gynnas när matchningarna rangordnas.

I följande tabell används standardvärdet searchMode=any, där ett blanksteg mellan ord fungerar som OR.

Query Vad kan mäta sig med Vad förstärkningen gynnar
deferred tax^2 deferred, tax, eller båda. Endast ordet tax.
"deferred tax"^2 Den fullständiga frasen, med orden bredvid varandra och i den här ordningen. Den fullständiga frasen.
(deferred OR tax)^2 deferred, tax, eller båda. Allt inom parenteserna som en grupp.

Med searchMode=allkräver frågan deferred tax^2 att båda orden matchar. Boosten gäller fortfarande bara för tax. Om du vill matcha något av ord i stället skriver du deferred OR tax^2.

Placera caret efter det avslutande citattecknet eller parenteserna när du vill öka hela frasen eller gruppen. Parenteser skapar ingen fras. Använd citattecken när orden måste vara bredvid varandra och i en viss ordning.

Boost och fältomfång

Ett fältnamn följt av ett kolon begränsar var Azure AI-sökning söker. Ett uppsving ändrar hur Azure AI-sökning rangordnar en matchning. Du kan använda båda i samma fråga.

Query Vad det innebär
content:deferred tax^2 Fältprefixet gäller endast för deferred. Den separata delen tax^2 använder de fält som har valts med searchFields, eller alla sökbara fält om searchFields inte har angetts. En tax match får extra rangordningsvikt.
content:"deferred tax"^2 Leta efter den fullständiga frasen enbart i content och ge den frasmatchningen extra vikt i rankningen.
content:(deferred OR tax)^2 Leta bara efter något av orden i contentoch ge den grupperade matchningen extra rangordningsvikt.

Om till exempel searchFields är inställt på titlesöker den första frågan efter deferred i content och tax i title. Citattecknen och parenteserna i de andra frågorna behåller båda orden i content.

Important

Kolon och caret fungerar i motsatta riktningar. Fältprefixet content: gäller för frågedelen efter den. Boosten ^2 gäller för frågedelen före den. Använd citattecken eller parenteser om du vill att den delen ska innehålla mer än ett ord. Mer information finns i Fältsökning och Prioritet (gruppering).

Effekten av en analysator på förstärkta frågor

För vanliga ord, fraser och grupper av ord hoppar boostning inte över textanalysen. Innan matchningen bearbetar Azure AI-sökning fortfarande frågetexten med varje fälts analysverktyg. Därför kan samma förstärkta text matcha olika i fält som använder olika analysverktyg.

En fras eller grupp med ett fältprefix använder det fältets analysverktyg. Text utan fältprefix använder analysatorn för varje fält som genomsöks. Till exempel kan en analysator som omvandlar text till gemener matcha "DEFERRED TAX"^2 mot indexerade termer i gemener.

Andra frågeformulär, till exempel jokertecken, reguljära uttryck och fuzzy-frågor, använder olika analysregler. Att lägga till en boost ändrar inte dessa regler. Mer information finns i Steg 2: Lexikal analys.

Sökning efter reguljära uttryck

En sökning med reguljära uttryck hittar en matchning baserat på mönster som är giltiga under Apache Lucene, enligt beskrivningen i klassen RegExp.

I Azure AI-sökning är ett reguljärt uttryck:

  • Omslutet av snedstreck /
  • Endast gemener

Om du till exempel vill hitta dokument som innehåller motel eller hotelanger du /[mh]otel/. Reguljära uttryckssökningar matchas mot enkla ord.

Vissa verktyg och språk ställer extra krav på escape-tecken utöver de escape-regler som införts av Azure AI-sökning. För JSON är strängar som innehåller ett snedstreck undantagna med ett bakåtsnedstreck: microsoft.com/azure/ blir search=/.*microsoft.com\/azure\/.*/ där search=/.* <string-placeholder>.*/ konfigurerar det reguljära uttrycket och microsoft.com\/azure\/ är strängen med ett undantaget snedstreck.

Två vanliga symboler i regex-frågor är . och *. En . matchar ett tecken och ett * matchar det tidigare tecknet noll eller flera gånger. Till exempel /be./ matchar villkoren bee och bet medan /be*/ skulle matcha be, beeoch beee men inte bet. .* Tillsammans kan du matcha alla teckenserier för att /be.*/ skulle matcha alla termer som börjar med bebetter, till exempel.

Om du får syntaxfel i ditt reguljära uttryck granskar du escape-reglerna för specialtecken. Du kan också prova en annan klient för att bekräfta om problemet är verktygsspecifikt.

Sökning med jokertecken

Du kan använda allmänt erkänd syntax för flera (*) eller enstaka (?) jokerteckensökningar. Fullständig Lucene-syntax stöder prefix- och infixmatchning. Använd syntax för reguljära uttryck för suffixmatchning.

Observera att Lucene-frågeparsern stöder användningen av dessa symboler med en enda term och inte en fras.

Affixtyp Beskrivning och exempel
prefix Termfragmentet kommer före * eller ?. Till exempel, ett frågeuttryck för search=alpha* returnerar alphanumeric eller alphabetical. Prefixmatchning stöds i både enkel och fullständig syntax.
suffix Termfragmentet kommer efter * eller ?, med ett snedstreck för att avgränsa konstruktionen. Till exempel, search=/.*numeric/ returnerar alphanumeric.
infix Termfragments omsluter * eller ?. Returnerar search=non*al till exempel non-numerical och nonsensical.

Du kan kombinera operatorer i ett uttryck. Matchar till exempel 980?2*98072-1222 och 98052-1234, där ? matchar på ett enda (obligatoriskt) tecken och * matchar tecken med en godtycklig längd som följer.

Suffixmatchning kräver reguljära uttrycksavgränsare med snedstreck /. I allmänhet kan du inte använda en * eller ? en symbol som det första tecknet i en term, utan /. Det är också viktigt att observera att * beter sig annorlunda när det används utanför regex-frågor. Utanför regex snedstrecksavgränsare / är * ett jokertecken och matchar vilken teckenserie som helst, ungefär som .* i regex. Till exempel search=/non.*al/ genererar samma resultatuppsättning som search=non*al.

Note

Som regel är mönstermatchning långsam, så du kanske vill utforska alternativa metoder, till exempel tokenisering med kant-n-gram som skapar token för sekvenser av tecken i en term. Med n-gram-tokenisering blir indexet större, men frågor kan köras snabbare, beroende på mönsterkonstruktionen och längden på strängar som du indexerar. Mer information finns i Partiell termsökning och mönster med specialtecken.

Effekten av en analysator på jokerteckenfrågor

Under frågeparsning skickas frågor som är formulerade som prefix, suffix, jokertecken eller reguljära uttryck till frågeträdet och kringgår lexikal analys. Matchningar hittas bara om indexet innehåller strängarna i det format som din fråga anger. I de flesta fall behöver du en analysator under indexeringen som bevarar strängintegriteten så att partiell term- och mönstermatchning lyckas. Mer information finns i Partiell termsökning i Azure AI-sökning-frågor.

Överväg en situation där du kanske vill att sökfrågan terminal* ska returnera resultat som innehåller termer som terminate, terminationoch terminates.

Om du skulle använda analysatorn en.lucene (engelska Lucene) skulle den tillämpa aggressiv härstamning av varje term. Till exempel terminatetermination, , terminates kommer alla att tokeniseras ned till token termi i ditt index. Å andra sidan analyseras inte termer i frågor med jokertecken eller fuzzy-sökning alls, så det skulle inte finnas några resultat som skulle matcha terminat* frågan.

Å andra sidan är Microsoft-analysverktygen (i det här fallet en.microsoft analyzer) lite mer avancerade och använder lemmatisering i stället för stamning. Det innebär att alla genererade token ska vara giltiga engelska ord. Till exempel terminate, terminates och termination förblir mest hela i indexet och är ett mer fördelaktigt val för scenarier som är mycket beroende av jokertecken och suddig sökning.

Note

Jokertecken-, prefix- och regex-frågetermer matchas mot de bokstavliga tokenen i indexet. Eftersom de flesta analysverktyg har indexerat innehåll med gemener kan en versalterm som Contoso* inte matcha en token som contoso. Skriv dessa frågetermer med gemener i programmet, baserat på analysatorns skiftlägesnormalisering för fältet.

Bedömning av wildcard- och regex-frågor

Azure AI-sökning använder frekvensbaserad bedömning (BM25) för textfrågor. För Jokertecken- och regex-frågor där termernas omfattning potentiellt kan vara bred ignoreras dock frekvensfaktorn för att förhindra att rangordningen blir partisk mot matchningar från ovanligare termer. Alla matchningar behandlas lika för jokertecken- och regex-sökningar.

Specialtecken

I vissa fall kanske du vill söka efter ett specialtecken, till exempel en emoji ❤ eller tecknet €. I sådana fall ska du se till att analysatorn du använder inte filtrerar bort dessa tecken. Standardanalysatorn kringgår många specialtecken, exklusive dem från ditt index.

Analysverktyg som tokeniserar specialtecken inkluderar whitespace-analysatorn, som tar hänsyn till alla teckensekvenser avgränsade med blanksteg som token (så strängen skulle betraktas som en token). Dessutom skulle en språkanalysator som Microsoft English Analyzer ("en.microsoft"), ta strängen "€" som en token. Du kan testa en analysator för att se vilka token den genererar för en viss fråga.

När du använder Unicode-tecken, kontrollera att symbolerna är korrekt kodade i fråge-URL:en (till exempel skulle använda escape-sekvensen %E2%9D%A4+). Vissa REST-klienter utför den här översättningen automatiskt.

Prioritet (gruppering)

Använd parenteser för att styra vilka delar av en fråga som utvärderas tillsammans. Kräver till exempel motel AND (wifi OR luxury)motel och minst en av termerna inom parenteserna: wifi eller luxury.

Placera ett fältprefix före en parentesiserad grupp för att söka i hela gruppen i ett fält. Till exempel söker hotelAmenities:(wifi OR pool) efter wifi eller pool endast i fältet hotelAmenities.

Parenteser styr hur AND och OR fungerar tillsammans. De kräver inte att ord visas bredvid varandra eller i en specifik ordning. Använd citattecken för det beteendet. Om du vill förstärka en grupp, placerar du markören efter den avslutande parentesen, som i hotelAmenities:(wifi OR pool)^2. Mer information finns i Öka omfånget.

Begränsningar för frågestorlek

Azure AI-sökning begränsar frågestorleken och kompositionen eftersom obundna frågor kan destabilisera söktjänsten. Det finns gränser för frågestorlek och sammansättning (antalet satser). Det finns också gränser för längden på prefixsökningen och för komplexiteten i regex-sökning och jokerteckensökning. Om ditt program genererar sökfrågor programmatiskt rekommenderar vi att du utformar det på ett sådant sätt att det inte genererar frågor av obundna storlekar.

Mer information om frågegränser finns i API-begärandebegränsningar.

Se även