Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka
Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.
V případě scénářů fulltextového vyhledávání Azure AI Vyhledávač implementuje dva dotazovací jazyky založené na Lucene, přičemž každý z nich je zarovnaný k analyzátoru dotazů. Analyzátor jednoduchých dotazů je výchozí. Řeší běžné případy použití a snaží se interpretovat požadavek, i když není dokonale složený. Další analyzátor je Lucene Query Parser a podporuje pokročilejší konstrukce dotazů.
Tento článek je referenčními informacemi o syntaxi dotazu pro jednoduchý analyzátor dotazů.
Syntaxe dotazu pro oba analyzátory se vztahuje na výrazy dotazu předávané v search parametru požadavku dotazu, ne zaměňovat se syntaxí OData s vlastní syntaxí a pravidly pro filter výrazy orderby ve stejném požadavku.
I když je jednoduchý analyzátor založený na třídě Apache Lucene Simple Query Parser, její implementace v Azure AI Vyhledávač vylučuje přibližné vyhledávání. Pokud potřebujete přibližné vyhledávání, zvažte místo toho alternativní úplnou syntaxi dotazu Lucene .
Příklad (jednoduchá syntaxe)
Tento příklad ukazuje jednoduchý dotaz rozlišující "queryType": "simple" a platnou syntaxi. I když je typ dotazu nastavený níže, jedná se o výchozí hodnotu, kterou je možné vynechat, pokud se nevrátíte z alternativního typu. Následující příklad je hledání nezávislých termínů s požadavkem, aby všechny odpovídající dokumenty obsahovaly "pool".
POST https://{{service-name}}.search.windows.net/indexes/hotel-rooms-sample/docs/search?api-version=2026-04-01
{
"queryType": "simple",
"search": "budget hotel +pool",
"searchMode": "all"
}
Parametr searchMode je v tomto příkladu relevantní. Vždy, když jsou v dotazu logické operátory, měli byste obecně nastavit searchMode=all , aby se zajistilo, že se shodují všechna kritéria. V opačném případě můžete použít výchozí nastavení searchMode=any , které upřednostňuje odvolání oproti přesnosti.
Další příklady najdete v příkladech syntaxe jednoduchých dotazů. Podrobnosti o požadavku a parametrech dotazu najdete v tématu Hledat dokumenty (REST API).
Hledání klíčových slov podle termínů a frází
Řetězce předané parametru search můžou obsahovat termíny nebo fráze v libovolném podporovaném jazyce, booleovské operátory, prioritní operátory, zástupné nebo předponové znaky pro dotazy "začíná na", únikové znaky a znaky kódování URL. Parametr search je volitelný. Nezadané, vyhledávání (search=* nebo search=" ") vrátí prvních 50 dokumentů v libovolném pořadí (bez pořadí).
Hledání termínů je dotaz jednoho nebo více termínů, kde se některý z termínů považuje za shodu.
Hledání přesné fráze je přesná fráze uzavřená do uvozovek
" ". Když by napříkladRoach Motel(bez uvozovek) vyhledaly dokumenty, které obsahujíRoachMotelnebo kdekoli v libovolném pořadí,"Roach Motel"(s uvozovkami) se budou shodovat pouze s dokumenty, které obsahují celou frázi společně a v tomto pořadí (lexikální analýza stále platí).
V závislosti na vašem vyhledávacím klientovi může být nutné escapovat uvozovky při vyhledávání podle frází. Například při POST požadavku může být hledání fráze "Roach Motel" v těle požadavku specifikováno jako "\"Roach Motel\"". Pokud používáte Sady Azure SDK, vyhledávací klient ukládá uvozovky při serializaci vyhledávacího textu. Vaše hledaná fráze může být odeslána jako "Roach Motel".
Ve výchozím nastavení všechny řetězce předané v parametru search procházejí lexikální analýzou. Ujistěte se, že rozumíte chování tokenizace analyzátoru, který používáte. Pokud jsou výsledky dotazů neočekávané, je často možné zjistit, jak se termíny v době dotazu tokenizují. Tokenizaci můžete otestovat u konkrétních řetězců , abyste potvrdili výstup.
Jakýkoli textový vstup s jedním nebo více termíny se považuje za platný výchozí bod pro provádění dotazu. Azure AI Vyhledávač budou odpovídat dokumentům, které obsahují některé nebo všechny termíny, včetně všech variant nalezených během analýzy textu.
Stejně jednoduché, jako to zní, je v Azure AI Vyhledávač jeden aspekt provádění dotazů, který může vytvářet neočekávané výsledky, zvyšuje výsledky hledání spíše, než že by je snižoval, když se do vstupního řetězce přidávají další výrazy a operátory. Zda k tomuto rozšíření skutečně dochází, závisí na zahrnutí operátoru NOT v kombinaci s nastavením parametru searchMode, který určuje, jak je operátor NOT interpretován prostřednictvím chování určeného skrze AND nebo OR. Další informace naleznete v operátoru NOT v části Logické operátory.
Logické operátory
Logické operátory můžete vložit do řetězce dotazu, abyste zlepšili přesnost shody. V jednoduché syntaxi jsou logické operátory založené na znakech. Textové operátory, například slovo AND, nejsou podporované.
| Znak | Příklad | Použití |
|---|---|---|
+ |
pool + ocean |
Operace AND . Například stanoví, pool + ocean že dokument musí obsahovat oba termíny. |
| |
pool | ocean |
Operace OR najde shodu, když se najde některý z termínů. V tomto příkladu dotazovací modul vrátí shodu u dokumentů obsahujících buď pool nebo ocean obojí. Protože OR je výchozím operátorem spojení, můžete jej také vynechat, takže pool ocean je ekvivalentem pool | ocean. |
- |
pool – ocean |
NOT Operace vrátí shodu u dokumentů, které termín vylučují. Parametr searchMode v požadavku na dotaz určuje, zda je termín s operátorem NOT sloučen nebo kombinován s jinými termíny v dotazu (za předpokladu, že v ostatních termínech nejsou použity žádné logické operátory). Platné hodnoty zahrnují any nebo all.
searchMode=any zvyšuje úplnost dotazů zahrnutím dalších výsledků a ve výchozím nastavení - se interpretuje jako "NEBO NOT". Například pool - ocean bude odpovídat dokumentům, které buď obsahují termín pool, nebo termín ocean neobsahují.
searchMode=all zvýší přesnost dotazů tím, že zahrne méně výsledků a ve výchozím nastavení - se interpretuje jako "A NE". Například dotaz searchMode=anypool - ocean bude odpovídat dokumentům, které obsahují termín "bazén", a všem dokumentům, které neobsahují termín "oceán". To je pravděpodobně intuitivnější chování operátora - . Proto byste měli zvážit použití searchMode=all místo searchMode=any, pokud chcete optimalizovat hledání pro přesnost místo úplnosti a vaši uživatelé často používají operátor - při hledání. Při rozhodování o searchMode nastavení zvažte vzory interakce uživatelů pro dotazy v různých aplikacích. Uživatelé, kteří hledají informace, pravděpodobně zahrnou operátora do dotazu, na rozdíl od e-commerce webů, které mají více předdefinovaných navigačních struktur. |
Dotazy předpon
Pro dotazy "začínající s" přidejte operátor přípony (*) jako zástupný symbol pro zbytek výrazu. Před přidáním operátoru přípony musí dotaz předpony začínat alespoň jedním znakem prostého textu.
| Znak | Příklad | Použití |
|---|---|---|
* |
lingui* se bude shodovat s "lingvistický" nebo "linguini" |
Hvězdička (*) zastupuje jeden nebo více znaků libovolné délky bez ohledu na velikost písmen. |
Podobně jako filtry hledá dotaz na předponu přesnou shodu. Proto neexistuje žádné vyhodnocování relevance (všechny výsledky obdrží skóre hledání 1,0). Mějte na paměti, že dotazy na předpony mohou být pomalé, zejména pokud je index velký a předpona se skládá z malého počtu znaků. Alternativní metodologie, jako je například tokenizace n-gramu edge, může být rychlejší. Termíny používající vyhledávání předpon nesmí být delší než 1 000 znaků.
Jednoduchá syntaxe podporuje pouze porovnávání předpon. Pro příponové nebo infixové párování na konci nebo uprostřed termínu použijte úplnou syntaxi Lucene pro vyhledávání se zástupným znaménkem.
Únik znaků operátorů vyhledávání
Operátory vyhledávání v jednoduché syntaxi obsahují tyto znaky: + | " ( ) ' \
Pokud některý z těchto znaků je součástí tokenu v indexu, uvozte ho předponou jediným zpětným lomítkem (\) v dotazu. Předpokládejme například, že jste použili vlastní analyzátor pro tokenizaci celého termínu a váš index obsahuje řetězec "Luxury+Hotel". Pokud chcete získat přesnou shodu s tímto tokenem, vložte řídicí znak: search=luxury\+hotel.
Aby se v případě typických případů zjednodušily, existují dvě výjimky tohoto pravidla, kdy není potřeba utéct:
Operátor
-NOT je potřeba uniknout pouze v případě, že je prvním znakem za mezerou. Pokud se-zobrazí uprostřed (například v3352CDD0-EF30-4A2E-A512-3B30AF40F3FD), můžete přeskočit escapování.Operátor
*sufixu musí být escapován pouze v případě, že jde o poslední znak před mezerou.*Pokud se zobrazí uprostřed (například v4*4=16), není potřeba žádné eskapace.
Poznámka
Ve výchozím nastavení standardní analyzátor odstraní a přeruší slova u spojovníků, prázdných znaků, ampersandů a dalších znaků během lexikální analýzy. Pokud potřebujete, aby v řetězci dotazu zůstaly speciální znaky, budete možná potřebovat analyzátor, který je zachová v indexu. Mezi volby patří Microsoft přirozené analyzátory jazyka, které zachová dělení slov nebo vlastní analyzátor složitějších vzorů. Další informace naleznete v části Částečné termíny, vzory a speciální znaky.
Kódování nebezpečných a rezervovaných znaků v adresách URL
Zajistěte, aby všechny nebezpečné a rezervované znaky byly kódovány v adrese URL. Znak #je například nebezpečný znak, protože se jedná o identifikátor fragmentu nebo ukotvení v adrese URL. Znak musí být zakódován jako %23, pokud je použit v adrese URL. '& ' a '=' jsou příklady vyhrazených znaků, protože oddělují parametry a určují hodnoty v Azure AI Vyhledávač. Další informace najdete v tématu RFC1738: Uniform Resource Locators (URL).
Nebezpečné znaky jsou " ` < > # % { } | \ ^ ~ [ ]. Rezervované znaky jsou ; / ? : @ = + &.
Speciální znaky
Speciální znaky můžou být v rozsahu od symbolů měny, jako je $nebo €, až po emoji. Mnoho analyzátorů, včetně výchozího standardního analyzátoru, vyloučí během indexování speciální znaky, což znamená, že v indexu nebudou reprezentovány.
Pokud potřebujete speciální reprezentaci znaků, můžete přiřadit analyzátor, který je zachová:
Analyzátor prázdných znaků považuje za tokeny libovolnou posloupnost znaků oddělenou prázdnými znaky (takže emoji ❤ "' by se považovalo za token).
Analyzátor language, například Microsoft anglický analyzátor (
en.microsoft), by jako token použil řetězec $nebo €.
Pro potvrzení můžete otestovat analyzátor , abyste zjistili, jaké tokeny se pro daný řetězec vygenerují. Jak můžete očekávat, nemusíte z jednoho analyzátoru získat úplnou tokenizaci. Alternativním řešením je vytvořit více polí, která obsahují stejný obsah, ale s různými přiřazeními analyzátoru (například description_en, description_fratd. pro analyzátory jazyka).
Pokud používáte znaky Unicode, ujistěte se, že jsou symboly v adrese URL dotazu správně zakódované (například pro znak '❤' se použije úniková sekvence %E2%9D%A4+). Někteří weboví klienti tento překlad dělají automaticky.
Priorita (seskupení)
Pomocí závorek můžete vytvořit poddotazy a zahrnout do nich operátory. Vyhledá například motel+(wifi|luxury) dokumenty obsahující termín "motel" a buď "wi-fi" nebo "luxury" (nebo obojí).
Omezení velikosti dotazů
Pokud vaše aplikace generuje vyhledávací dotazy prostřednictvím kódu programu, doporučujeme ho navrhnout tak, aby negenerovala dotazy s nevázanou velikostí.
V případě get nemůže délka adresy URL překročit 8 kB.
Pro POST (a jakýkoli jiný požadavek), kde text požadavku obsahuje
searcha další parametry, jakofilterorderbya , maximální velikost je 16 MB. Mezi další omezení patří:- Maximální délka vyhledávací klauzule je 100 000 znaků.
- Maximální počet klauzulí v
search(výrazy oddělené operátorem AND nebo OR) je 1024. - Maximální velikost hledaného termínu je 1000 znaků pro hledání předpon.
- Existuje také limit přibližně 32 kB velikosti libovolného jednotlivého termínu v dotazu.
Další informace o limitech dotazů najdete v tématu Omezení požadavků rozhraní API.
Další kroky
Pokud budete dotazy vytvářet prostřednictvím kódu programu, projděte si Textové vyhledávání v Azure AI Vyhledávač abyste porozuměli fázím zpracování dotazů a důsledkům analýzy textu.
Další informace o konstrukci dotazů najdete také v následujících článcích: