Sdílet prostřednictvím


Použití rozšířené syntaxe dotazů prostřednictvím kódu programu

Advanced Query Syntax (AQS) je výchozí syntaxe dotazu používaná službou Windows Search k dotazování indexu a upřesnění a zúžení parametrů hledání. AQS používají vývojáři k programovému vytváření dotazů (a uživatelům, aby zúžili parametry hledání). Kanonické AQS bylo zavedeno v operačním systému Windows 7 a musí být používáno ve Windows 7 a novějších verzích k programovému generování dotazů AQS.

Toto téma je uspořádané takto:

O rozšířené syntaxi dotazů

Dotaz se skládá ze základních dotazů spojených s operátory AND, OR a NOT, jak je znázorněno v následující ukázkové syntaxi:

<query> ::=
     <basic query>
| ( <query> )
| <query> AND <query>  
| <query> <query>    // Same as <query> AND <query>
| <query> OR <query> 
| NOT <query>

Poznámka

AQS nerozlišuje malá a velká písmena, s výjimkou funkce AND, OR a NOT, která musí být ve všech velkých písmenech.

 

Pokud dotaz používá dvě nebo více použití funkce AND nebo OR, vytvoří vazbu zleva doprava bez ohledu na to, jestli se jedná o operátor AND nebo NEBO. To znamená, že dotaz "jablko A hrušeň NEBO švestka" bude interpretován jako "(jablko A hrušeň) NEBO švestka", a dotaz "jablko NEBO hrušeň A švestka", bude interpretován jako "(jablko NEBO hrušeň) A švestka". Takže pokud dokument obsahuje slovo plum, ale ani jablko, ani hrušeň, první dotaz ho vrátí, ale druhý dotaz ne. Proto doporučujeme použít explicitní závorky pro každý dotaz, který kombinuje operátor AND a OR, abyste se vyhnuli chybám nebo chybné interpretaci.

Základní dotaz vyhledává položky, které splňují omezení týkající se vlastnosti. Jedinou požadovanou částí základního dotazu je omezení nebo hodnota hledání. Pokud nezadáte vlastnost, Windows Search prohledá všechny vlastnosti. <restr> představuje omezení vyhledávání.

Následující formy pro základní dotaz jsou platné:

<basic query> ::=
     <prop>:<basic restr>
| <restr>

Vlastnost je určena klíčovým slovem, jako je autor nebo velikost, nebo názvem kanonické vlastnosti, například System.DateModified. Platné formáty pro vlastnost jsou následující:

<prop> ::= 
     <canonical property name>
| <property label in UI language>

Operátor označuje operaci, například < nebo =. Seznam platných operátorů najdete v části Operátory dotazů dále v tomto tématu.

Základní omezení je jednoduché omezení vlastnosti, která se dá zapsat bez závorek:

<basic restr> ::=
     <value>
| <op><value>
| NOT <basic restr>
| ( <restr> )

Omezení je vyhledávací hodnota, například číselná hodnota nebo řetězcová hodnota, volitelně s operátorem. Platné formuláře omezení jsou následující:

<restr> ::=
    <basic restr>
| <restr> AND <restr>
| <restr> <restr>      // Same as <restr> AND <restr>
| <restr> OR <restr>

Pokud nezadáte operátor, windows Search zvolí nejvhodnější operátor pro váš dotaz:

  • U řetězcové vlastnosti se předpokládá operátor COP_WORD_STARTSWITH $<.
  • U všech ostatních vlastností se předpokládá COP_EQUAL = operátor.

Pro programové použití AQS doporučujeme vždy použití explicitního operátoru. Platný formulář pro vyhledávání jednoduché hodnoty nebo rozsahu hodnot je následující:

<value> ::=
    <simplevalue>
| <simplevalue> .. <simplevalue>

Jednoduchá hodnota se může skládat z některého z následujících typů:

<simplevalue> ::=
  []         // No value, or a null value
| <word>     // A sequence of characters without whitespace
| <number>   // An integer or a floating point number
| <datetime> // A relative date, or an absolute date and/or time
| <Boolean>
| "..."      // A phrase
| <enumeration range>

Příklady

Dotaz, který hledá dokument obsahující fázi "poslední čtvrtletí", kterou vytvořil Theresa nebo Lee a který byl uložen do složky MyDocs, kombinuje tři základní dotazy následujícím způsobem:

"last quarter" author:(theresa OR lee) folder:MyDocs

Jedná se o tři základní dotazy:

  • "poslední čtvrtletí"
  • autor:(theresa OR lee)
  • složka:MyDocs

Základní dotaz, který používá kanonickou syntaxi, je:

System.Size:>1kb

Vlastnosti

Vlastnosti jsou odkazovány klíčovým slovem, což může být název kanonické vlastnosti v systému Windows 7 a novější. AQS v uživatelském rozhraní systému Windows může místo názvu kanonické vlastnosti použít popisek, například autor místo System.Author. Ve Windows Vista a dřívějších verzích bylo možné používat anglické popisky bez ohledu na jazyk uživatelského rozhraní. Ve Windows 7 a novějších Windows Search rozpoznává klíčová slova pouze v aktuálním výchozím jazyce uživatelského rozhraní.

Podpora vlastních vlastností

Ve Windows Vista a starších verzích nebyly vlastní vlastnosti v AQS k dispozici. Ve Windows 7 a novějších pracuje AQS s vlastními vlastnostmi registrovanými v systému vlastností. Další informace o vytváření vlastních vlastností naleznete v tématu Systém vlastností.

Vlastnosti DateTime ve Windows 8

Od Windows 8 podporují vlastnosti DateTime (například System.DateModified) kanonický formát data a času určený ISO-8601, volitelně včetně časového pásma UTC.

  • Windows 8 a starší, datum a čas bez časového pásma UTC:YYYY-MM-DDThh:mm:ss

    Tento formát určuje místní čas bez ohledu na národní prostředí uživatele nebo systému.

  • Windows 8, datum a čas s časovým pásmem UTC:YYYY-MM-DDThh:mm:ssTZD

    Tento formát určuje čas v zadaném časovém pásmu UTC.

Použití klíčového slova v místních jazycích

Ve Windows 7 a novějších fungují klíčová slova mnemonic pouze v systémovém jazyce, jako jsou německá klíčová slova pouze v německém operačním systému a anglická klíčová slova pouze v anglickém operačním systému. System.Author je kanonické klíčové slovo a mnemonická hodnota pro vlastnost System.Author je například Autor. Zavedení kanonických klíčových slov kompenzuje skutečnost, že anglická mnemonic klíčová slova již nejsou všeobecně rozpoznána ve všech operačních systémech bez ohledu na jazyk, jak tomu bylo v systému Windows Vista a dříve.

Poznámka

Ve Windows 7 a novějších windows služba Windows Search rozpozná klíčová slova pouze v aktuálním výchozím jazyce, a ne v angličtině, pokud angličtina není aktuální výchozí. Doporučujeme, aby vývojáři vždy používali kanonickou syntaxi, aby jejich aplikace neměla problémy s jazykem s klíčovými slovy.

 

Kanonická pokročilá syntaxe dotazů ve Windows 7

Kanonická syntaxe byla zavedena pro klíčová slova ve Windows 7. Příklad dotazu s kanonickou vlastností je System.Message.FromAddress:=me@microsoft.com. Při psaní dotazů v aplikacích běžících ve Windows 7 a novějších je nutné použít kanonickou syntaxi pro programové generování dotazů AQS. Pokud nepoužíváte kanonickou syntaxi a vaše aplikace se nasadí v národním prostředí nebo v jazyce uživatelského rozhraní, který se liší od jazyka v kódu aplikace, nebudou vaše dotazy interpretovány správně.

Konvence syntaxe kanonických klíčových slov jsou následující:

  • Kanonická syntaxe vlastnosti je její kanonický název, například System.Photo.LightSource. V kanonických názvech se nerozlišují malá a velká písmena.
  • Kanonická syntaxe logických operátorů se skládá z klíčových slov AND, OR a NOT ve všech velkých písmenech.
  • Operátory <, >, =atd., nejsou lokalizovány a jsou tedy také součástí kanonické syntaxe.
  • Pokud má vlastnost P výčtové hodnoty nebo oblasti s názvem N₁ až Nₖ, kanonická syntaxe pro Ihodnotu nebo rozsah je kanonický název P, následovaný znakem #, následovaný NI, jak je znázorněno v následujícím příkladu.
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardAa tak dále.
  • Pro definovaný sémantický typ T s hodnotami nebo rozsahy pojmenovanými jako N₁ až Nk je kanonická syntaxe příslušné hodnoty nebo rozsahu Ikanonický název pro T, následovaný znakem #, následovaný znakem NI, jak je znázorněno v následujícím příkladu.
    • System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
  • U literálových hodnot, jako jsou slova nebo fráze, je kanonická syntaxe stejná jako běžná syntaxe. Příklady dotazů s literálními hodnotami v kanonické syntaxi jsou:
    • System.Author:sanjay
    • System.Keywords:"Animal"
    • System.FileCount:>100

Poznámka

Pro čísla ve Windows 7 a novějších není kanonická syntaxe. Vzhledem k tomu, že se formáty s plovoucí desetinnou čárkou liší mezi národními prostředími, použití kanonického dotazu, který zahrnuje konstantu s plovoucí desetinnou čárkou, není podporováno. Celočíselné konstanty lze naopak zapisovat pouze pomocí číslic (bez oddělovačů tisíců) a lze je bezpečně používat v kanonických dotazech ve Windows 7 a novějších verzích.

 

Příklady

V následující tabulce jsou uvedeny příklady kanonických vlastností a syntaxe pro jejich použití.

Typ kanonické vlastnosti Příklad Syntaxe
Řetězcová hodnota Systém.Autor
Hodnota řetězce se vyhledá ve vlastnosti autora:
System.Author:Jacobs
Rozsah výčtů Systémová Priorita Vlastnost priority může mít číselný rozsah hodnot:
System.Priority:System.Priority#High
Booleovský System.IsDeleted
Logické hodnoty lze použít s libovolnou logickou vlastností:
System.IsDeleted:System.StructuredQueryType.Boolean#Truea System.IsDeleted:System.StructuredQueryType.Boolean#False
Číselný System.Size
Není možné bezpečně psát kanonický dotaz, který zahrnuje plovoucí desetinnou číselnou konstantu, protože formáty s plovoucí desetinnou čárkou se liší mezi lokalitami. Celá čísla musí být zapsána bez oddělovačů tisíců. Například:
System.Size:<12345

 

Další informace o kanonických vlastnostech a systému vlastností obecně naleznete v tématu Vlastnosti systému. Případně se podívejte na soubory veřejných hlaviček.

Operátory dotazů

Pokud vlastnost p obsahuje více hodnot pro určitou položku, dotaz AQS pro p:<restr> vrátí položku, pokud <restr> je true pro alespoň jednu z hodnot. (<restr> představuje omezení.)

Syntaxe uvedená v následující tabulce se skládá z operátoru, symbolu operátoru, příkladu a příkladu popisu. Operátor a symbol lze použít v libovolném jazyce a zahrnout do libovolného dotazu. Nepoužívejte operátory COP_IMPLICIT ani COP_APPLICATION_SPECIFIC. Některé operátory mají zaměnitelné symboly.

Operátor Symbol Příklad Popis
COP_EQUAL =
System.FileExtension:=".txt"
Hodnota je řetězec ".txt".
COP_NOTEQUAL
-
<>
NE
- -
System.Kind:≠obrázek
System.Photo.DateTaken:-[]¹
System.Kind:<>obrázek
System.Druh:NENÍ obrázek
System.Kind:- -picture
Vlastnost System.Kind není obrázek.
Vlastnost System.Photo.DateTaken má hodnotu.
Vlastnost System.Kind není obrázek.
Vlastnost System.Kind není obrázek.
Dvojité operátory NOT použité na stejnou vlastnost se nezruší. Proto System.Kind:- -picture je ekvivalentem System.Kind:-picture a System.Kind:NOT picture.
COP_MÉNĚNEŽ <
Velikost systému:<1 kB
Tato hodnota je menší než 1 kB.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
Dnes je tato hodnota větší než .
COP_LESSTHANOREQUAL <=

Systém.Velikost:<=1kb
Tato hodnota je menší nebo rovna 1 kB.
VĚTŠÍNEBOROVNÝ >=

System.Size:>= 1 kB
Tato hodnota je rovna nebo větší než 1 kB.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ Primer"
Najde položky, kde název souboru začíná znaky "C++ Primer".
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>non
Vyhledá položky, kde hodnota vlastnosti končí znaky , ale nekončí znaky.
HODNOTA_COP_OBSAHUJE ~=
~~
System.Předmět.~=round
System.Search.Autosummary:~~round
Najde zprávu, která obsahuje tento řetězec v předmětu, která například odpovídá "gkolo pravidla".
Najde všechny položky s automatickým shrnutím, které obsahují znaky a.
COP_HODNOTA_NEOBSAHUJE ~!
System.Author:~!" sanjay"
Najde autory, kteří nemají ve svých jménech posloupnost znaků "sanjay".
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
Najde soubory, kde název souboru začíná Mic, následovaný nějakým znakem, následovaným osoft w, následovaným libovolnými znaky končícími d.
To? a * znaky nejsou interpretovány doslova a fungují jako zástupné znaky ve stylu DOS:
  • ? odpovídá jednomu libovolnému znaku.
  • * odpovídá nule nebo více libovolných znaků.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Pro Windows 7 a novější. Najde frázi "Sanjay Jacobs" ve všech vlastnostech From. Za slovo Sanjay musí následovat slovo Jacobs.
SLOVO_ZAČÍNÁ $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Pro Windows 7 a novější. Najde libovolnou položku, ve které autor obsahuje slovo začínající znaky "San".
Najde jakýkoli soubor, ve kterém název souboru obsahuje slovo začínající mikro, následované slovem začínajícím exe.

 

¹ Prázdné hranaté závorky ([]) označují "žádná hodnota".

U vlastností řetězce je výchozí operace COP_WORD_STARTS_WITH nebo COP_WORD_EQUAL.

Hodnoty dotazu

Užitečné příklady omezení hodnot dotazů jsou uvedeny v následující tabulce.

Hodnota/symbol Příklady Popis
Řetězec auto
Libovolná posloupnost znaků, kterou lze vyhledat. Řetězec nesmí obsahovat prázdné znaky ani kombinace znaků, které jsou součástí syntaxe. Tento příklad vyhledá slovo začínající auto.
Řetězec v uvozovkách "" "Závěry: platné" ""Modrý"" tým"
Libovolná posloupnost znaků. Řetězec není interpretován jako součást syntaxe.
Uvozovky mohou být zahrnuty do dotazu, pokud se zdvojnásobí. Tento příklad hledá tým "modrý" .
Celé číslo 5678
Používejte pouze číslice pro celá čísla. Nepoužívejte žádné oddělovače pro tisíce.
Číslo s pohyblivou řádovou čárkou 5678.1234
Vzhledem k tomu, že se formáty s plovoucí desetinnou čárkou liší mezi lokálními prostředími, nemůže kanonický dotaz použít plovoucí desetinnou konstantu. Použití kanonické syntaxe s desetinnými čísly s plovoucí řádovou čárkou není z hlediska lokalizace bezpečné.
Logická hodnota pravda/nepravda System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
Booleovská hodnota TRUE.
FALSE logická hodnota typu Boolean.
[] System.Keywords:=[]
Prázdné hranaté závorky označují, že neexistuje žádná hodnota. Tento příklad najde všechny položky, které nebyly označené.
Absolutní data System.ItemDate:26.1.2010
SystemDateModified 15.10.2002 19:00
Najde položky s datem 26. ledna 2010.
Najde položky změněné 15. října 2002 mezi hodinami 19:00:00 a 19:00:59.

Poznámka:
Vzhledem k tomu, že formáty kalendářních dat (podobně jako formáty s plovoucí desetinnou tečkou) se mezi národními prostředími liší, použití kanonické syntaxe s absolutními daty není podporováno a není bezpečné z hlediska lokalizace.


Relativní data System.ItemDate:System.StructuredQueryType.DateTime#Today
System.DateAcquired:System.StructuredQueryType.DateTime#PříštíMěsíc
System.Message.DateReceived:System.StructuredQueryType.DateTime#LastYear
Najde položky s dnešním datem.
Najde položky s datem v následujícím měsíci.
Najde položky s datem v posledním roce.

Poznámka:
Kromě hledání konkrétních dat a rozsahů dat rozpozná AQS relativní hodnoty dat (například dnes, zítra, příští týden, příští měsíc), a den (například úterý nebo pondělí až středa) a měsíc (únor).


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb.. 10 kB
Dvojité tečky označují rozsah hodnot. Najde položky s datem od 11.05.04 do 11.10.04. včetně.
Najde položky ve velikosti 5 až 10 kB.

 

Omezení rozsahu

Uživatelé můžou omezit rozsah hledání na konkrétní umístění složek nebo úložiště dat. Pokud například používáte několik e-mailových účtů a chcete omezit dotaz na Microsoft Outlook nebo Microsoft Outlook Express, můžete použít System.Search.Store:mapi nebo System.Search.Store:oe. Následující tabulka uvádí několik příkladů, jak omezit vyhledávání podle úložiště dat.

Omezení vyhledávání podle úložiště dat Klíčové slovo Příklad
Soubory soubor System.Search.Store:file
Vyhlídka mapi System.Search.Store:mapi
Outlook Express oe System.Search.Store:oe
Offline soubory csc System.Search.Store:csc
Konkrétní složka na místním disku složka System.ItemFolderNameDisplay:C:"\MyFolder"

 

Další zdroje informací

  • V systému Windows 7 a novějších může být možnost místní nabídky dostupná, pokud je splněna podmínka AQS. Další informace naleznete v tématu "Získání dynamického chování statických sloves pomocí rozšířené syntaxe dotazů" v vytváření obslužných rutin kontextové nabídky.
  • Dotazy AQS můžou být omezené na konkrétní typy souborů, které se označují jako typy souborů. Další informace naleznete v tématu Typy Souborů a Přidružení. Referenční dokumentaci k vlastnostem najdete v částech System.Kinda System.KindText.

Dotazování indexu programově

použití přístupů SQL a AQS k dotazování indexu

dotazování indexu pomocí ISearchQueryHelper

Dotazování Indexu pomocí search-ms protokolu

dotazování indexu pomocí syntaxe SQL služby Windows Search