Uso della sintassi di query avanzata a livello di codice

Advanced Query Syntax (AQS) è la sintassi di query predefinita usata da Windows Search per eseguire query sull'indice e per perfezionare e restringere i parametri di ricerca. AQS viene usato dagli sviluppatori per creare query a livello di codice (e dagli utenti per restringere i parametri di ricerca). Canonical AQS è stato introdotto in Windows 7 e deve essere usato in Windows 7 e versioni successive per generare query AQS a livello di codice.

Questo argomento è organizzato come segue:

Informazioni sulla sintassi delle query avanzate

Una query è costituita da query di base connesse con AND, OR e NOT, come illustrato nella sintassi di esempio seguente:

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

Nota

AQS non fa distinzione tra maiuscole e minuscole, ad eccezione di AND, OR e NOT, che devono essere in maiuscolo.

 

Se una query ha due o più usi di AND o OR, verranno associati da sinistra a destra, indipendentemente dal fatto che si tratti di AND o OR. Ovvero, la query "apple AND pear OR plum" verrà interpretata come se fosse stata scritta come "(apple AND pear) OR plum" e la query , "apple OR pear AND plum", verrà interpretata come "(apple OR pera) AND plum". Pertanto, se un documento contiene la parola plum ma né mela, né pera, la prima query lo restituirà, ma la seconda query non lo restituirà. È quindi consigliabile usare parentesi esplicite per qualsiasi query che combina AND e OR per evitare errori o interpretazione errata.

Una query di base cerca gli elementi che soddisfano una restrizione su una proprietà. L'unica parte necessaria di una query di base è la restrizione o il valore di ricerca. Se non specifichi una proprietà, Windows Search cerca tutte le proprietà. <restr> rappresenta la restrizione di ricerca.

I moduli seguenti per una query di base sono validi:

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

Una proprietà è designata da una parola chiave, ad esempio autore o dimensione, o da un nome di proprietà canonico, ad esempio System.DateModified. I moduli validi per una proprietà sono i seguenti:

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

Un operatore indica un'operazione come < o =. Per un elenco di operatori validi, vedere la sezione Operatori di query più avanti in questo argomento.

Una restrizione di base è una restrizione semplice per una proprietà che può essere scritta senza parentesi:

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

Una restrizione è un valore di ricerca, ad esempio un valore numerico o stringa, facoltativamente con un operatore. I moduli validi per una restrizione sono i seguenti:

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

Se non si specifica un operatore, Windows Search sceglie l'operatore più appropriato per la query:

  • Per una proprietà stringa, viene utilizzato l'operatore $ COP_WORD_STARTSWITH< .
  • Per tutte le altre proprietà, viene utilizzato l'operatore COP_EQUAL = .

Per l'uso programmatico di AQS, è consigliabile avere sempre un operatore esplicito. Il modulo valido per la ricerca di un valore semplice o un intervallo di valori è il seguente:

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

Un valore semplice può essere costituito da uno dei tipi seguenti:

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

Esempi

Una query che cerca un documento contenente la fase "last quarter", creata da Theresa o Lee e salvata nella cartella MyDocs, combina tre query di base come indicato di seguito:

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

Le tre query di base sono:

  • "ultimo trimestre"
  • author:(theresa OR lee)
  • folder:MyDocs

Una query di base che usa la sintassi canonica è:

System.Size:>1kb

Proprietà

Le proprietà vengono definite da una parola chiave, che può essere un nome di proprietà canonico in Windows 7 e versioni successive. AQS nell'interfaccia utente di Windows può usare l'etichetta anziché il nome della proprietà canonica, ad esempio autore anziché System.Author. In Windows Vista e versioni precedenti era possibile usare le etichette in inglese indipendentemente dalla lingua dell'interfaccia utente. In Windows 7 e versioni successive Windows Search riconosce le parole chiave solo nella lingua predefinita corrente dell'interfaccia utente.

Supporto per le proprietà personalizzate

In Windows Vista e versioni precedenti le proprietà personalizzate non erano disponibili in AQS. In Windows 7 e versioni successive, AQS funziona con proprietà personalizzate registrate nel sistema di proprietà. Per altre informazioni sulla creazione di proprietà personalizzate, vedere Sistema di proprietà.

Proprietà DateTime in Windows 8

A partire da Windows 8, le proprietà DateTime (ad esempio System.DateModified) supportano il formato di data e ora canonico specificato da ISO-8601, includendo facoltativamente il fuso orario UTC.

  • Windows 8 e versioni precedenti, data-ora senza fuso orario UTC: AAAA-MM-GGThh:mm:ss

    Questo formato specifica un'ora locale, indipendentemente dalle impostazioni locali dell'utente o del sistema.

  • Windows 8, data/ora con fuso orario UTC: AAAA-MM-GGThh:mm:ssTZD

    Questo formato specifica un'ora nel fuso orario UTC specificato.

Uso delle parole chiave nei linguaggi locali

In Windows 7 e versioni successive, le parole chiave mnemonic funzionano solo nella lingua di sistema, ad esempio parole chiave tedesche solo in un sistema operativo tedesco e parole chiave inglese solo in un sistema operativo inglese. System.Author è una parola chiave canonica e il valore mnemonico per la proprietà System.Author, ad esempio, è Author. L'introduzione delle parole chiave canoniche compensa il fatto che le parole chiave mnemonic inglesi non vengono più riconosciute universalmente in tutti i sistemi operativi indipendentemente dalla lingua, come nel caso di Windows Vista e versioni precedenti.

Nota

In Windows 7 e versioni successive Windows Search riconosce solo le parole chiave nella lingua predefinita corrente e non in inglese, a meno che l'inglese non sia l'impostazione predefinita corrente. È consigliabile che gli sviluppatori usino sempre la sintassi canonica in modo che l'applicazione non presenti problemi di linguaggio con le parole chiave.

 

Sintassi di query avanzate canoniche in Windows 7

La sintassi canonica è stata introdotta per le parole chiave in Windows 7. Un esempio di query con una proprietà canonica è System.Message.FromAddress:=me@microsoft.com. Quando si codificano query nelle applicazioni in esecuzione in Windows 7 e versioni successive, è necessario usare la sintassi canonica per generare query AQS a livello di codice. Se non si usa la sintassi canonica e l'applicazione viene distribuita in un linguaggio di impostazioni locali o di interfaccia utente diverso dal linguaggio nel codice dell'applicazione, le query non verranno interpretate correttamente.

Le convenzioni per la sintassi delle parole chiave canoniche sono le seguenti:

  • La sintassi canonica per una proprietà è il nome canonico, ad esempio System.Photo.LightSource. I nomi canonici non fanno distinzione tra maiuscole e minuscole.
  • La sintassi canonica per gli operatori booleani è costituita dalle parole chiave AND, OR e NOT, in tutte le maiuscole.
  • Gli operatori <, , >= e così via, non vengono localizzati e quindi fanno parte anche della sintassi canonica.
  • Se una proprietà P ha enumerato valori o intervalli denominati N₁ tramite Nk, la sintassi canonica per il valore o l'intervallo Iè il nome canonico per P, seguito dal carattere #, seguito da N I, come illustrato nell'esempio seguente:
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardAe così via.
  • Per un tipo semantico definito T con valori o intervalli denominati N₁ tramite Nk, la sintassi canonica per il valore o l'intervallo Iè il nome canonico per T, seguito dal carattere #, seguito da N, come illustrato nell'esempio seguente:
    • System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
  • Per i valori letterali, ad esempio parole o frasi, la sintassi canonica corrisponde alla sintassi regolare. Esempi di query con valori letterali nella sintassi canonica sono:
    • System.Author:sanjay
    • System.Keywords:"Animal"
    • System.FileCount:>100

Nota

Non esiste una sintassi canonica per i numeri in Windows 7 e versioni successive. Poiché i formati a virgola mobile variano tra le impostazioni locali, l'uso di una query canonica che prevede una costante a virgola mobile non è supportato. Le costanti integer, al contrario, possono essere scritte usando solo cifre (senza separatori per migliaia) e possono essere usate in modo sicuro nelle query canoniche in Windows 7 e versioni successive.

 

Esempi

La tabella seguente illustra alcuni esempi di proprietà canoniche e la sintassi per usarle.

Tipo di proprietà canonica Esempio Sintassi
Valore stringa System.Author
Il valore stringa viene cercato nella proprietà author:
System.Author:Jacobs
Intervallo di enumerazione System.Priority La proprietà priority può avere un intervallo di valori numerici:
System.Priority:System.Priority#High
Booleano System.IsDeleted
I valori booleani possono essere usati con qualsiasi proprietà booleana:
System.IsDeleted:System.StructuredQueryType.Boolean#True e System.IsDeleted:System.StructuredQueryType.Boolean#False
Numerico System.Size
Non è possibile scrivere in modo sicuro una query canonica che coinvolge una costante a virgola mobile, perché i formati a virgola mobile variano tra le impostazioni locali. I numeri interi devono essere scritti senza separatori per migliaia. Ad esempio:
System.Size:<12345

 

Per altre informazioni sulle proprietà canoniche e sul sistema di proprietà in genere, vedere Proprietà di sistema. In alternativa, fare riferimento ai file di intestazione pubblica.

Operatori di query

Se una proprietà, p, ha più valori per alcuni elementi, una query AQS per p:<restr> restituisce l'elemento se <restr> è true per almeno uno dei valori. (<restr> rappresenta una restrizione).

La sintassi elencata nella tabella seguente è costituita da un operatore, un simbolo di operatore, un esempio e una descrizione di esempio. L'operatore e il simbolo possono essere usati in qualsiasi linguaggio e inclusi in qualsiasi query. Non usare gli operatori COP_IMPLICIT o COP_APPLICATION_SPECIFIC. Alcuni operatori hanno simboli intercambiabili.

Operatore Simbolo Esempio Descrizione
COP_EQUAL =
System.FileExtension:=".txt"
Il valore è la stringa ".txt".
NOTEQUAL
-
<>
NOT
- -
System.Kind:≠picture
System.Photo.DateTaken:-[]¹
System.Kind:<>picture
System.Kind:NOT picture
System.Kind:- -picture
La proprietà System.Kind non è un'immagine.
La proprietà System.Photo.DateTaken ha un valore.
La proprietà System.Kind non è un'immagine.
La proprietà System.Kind non è un'immagine.
Gli operatori DOUBLE NOT applicati alla stessa proprietà non vengono annullati. Di conseguenza, System.Kind:- -picture è equivalente a System.Kind:-picture e System.Kind:NOT picture.
COP_LESSTHAN <
System.Size:<1kb
Questo valore è minore di 1 kb.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
Questo valore è maggiore di oggi.
COP_LESSTHANOREQUAL <=

System.Size:<=1kb
Questo valore è minore o uguale a 1 kb.
COP_GREATERTHANOREQUAL >=

System.Size:>=1kb
Questo valore è uguale o maggiore di 1 kb.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ Primer"
Trova gli elementi in cui il nome del file inizia con i caratteri "Primer C++".
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~non>
Trova gli elementi in cui il valore della proprietà termina con i caratteri non.
COP_VALUE_CONTAINS ~=
~~
System.Subject.~=round
System.Search.Autosummary:~~round
Trova un messaggio con questa stringa nell'oggetto e corrisponderà ad esempio a "regole round g".
Trova tutti gli elementi con un riepilogo automatico contenente i caratteri arrotondati.
COP_VALUE_NOTCONTAINS ~!
System.Author:~!" sanjay"
Trova gli autori che non hanno la sequenza di caratteri "sanjay" in loro.
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
Trova i file in cui il nome del file inizia con Mic, seguito da un carattere, seguito da osoft w, seguito da tutti i caratteri che terminano con d.
Il carattere ? e * i caratteri non vengono interpretati letteralmente e funzionano come caratteri jolly in stile DOS:
  • ? corrisponde a un carattere arbitrario.
  • * corrisponde a zero o più caratteri arbitrari.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Per Windows 7 e versioni successive. Trova la frase "Sanjay Jacobs" in tutte le proprietà From. La parola Sanjay deve essere seguita dalla parola Jacobs.
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Per Windows 7 e versioni successive. Trova qualsiasi elemento in cui Author contiene una parola che inizia con i caratteri "San".
Trova qualsiasi file in cui il nome del file contiene una parola che inizia con micro, seguita da una parola che inizia con exe.

 

¹ Parentesi quadre vuote ([]) denotano "no value".

Per le proprietà stringa, l'operazione predefinita è COP_WORD_STARTS_WITH o COP_WORD_EQUAL.

Valori di query

Esempi utili del modo in cui i valori di query possono essere limitati sono elencati nella tabella seguente.

Valore/simbolo Esempi Descrizione
Stringa auto
Qualsiasi sequenza di caratteri che è possibile cercare. La stringa non deve contenere spazi vuoti o combinazioni di caratteri che fanno parte della sintassi. Questo esempio cerca una parola che inizia con auto.
Stringa tra virgolette "" "Conclusioni: validità" "Il team ""blue""
Qualsiasi sequenza di caratteri. La stringa non viene interpretata come parte della sintassi.
Le virgolette possono essere incluse in una query se vengono raddoppiate. In questo esempio viene eseguita la ricerca del team "blu".
Intero 5678
Usare solo le cifre per i numeri interi. Non usare separatori per migliaia.
Numero a virgola mobile 5678.1234
Poiché i formati a virgola mobile variano tra le impostazioni locali, una query canonica non può usare una costante a virgola mobile. L'uso della sintassi canonica con numeri a virgola mobile non è sicuro per la localizzazione.
Valore booleano true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
Valore booleano TRUE .
Valore booleano FALSE .
[] System.Keywords:=[]
Le parentesi quadre vuote indicano che non esiste alcun valore. In questo esempio vengono trovati tutti gli elementi che non sono stati contrassegnati.
Date assolute System.ItemDate:26/1/2010
SystemDateModified 10/15/2002 19:00
Trova gli elementi con una data del 26 gennaio 2010.
Trova gli elementi modificati il 15 ottobre 2002 tra le ore 19:00:00 e 19:00:59.

Nota:
Poiché i formati di data (ad esempio i formati a virgola mobile) variano tra le impostazioni locali, l'uso della sintassi canonica con date assolute non è supportato e non è sicuro per la localizzazione.


Date relative System.ItemDate:System.StructuredQueryType.DateTime#Today
System.DateAcquired:System.StructuredQueryType.DateTime#NextMonth
System.Message.DateReceived:System.StructuredQueryType.DateTime#LastYear
Trova gli elementi con la data odierna.
Trova gli elementi con una data nel mese successivo.
Trova gli elementi con una data nell'ultimo anno.

Nota:
Oltre a eseguire ricerche in date e intervalli di date specifici, AQS riconosce i valori di data relativi (ad esempio oggi, domani, prossima settimana, mese successivo) e giorno (ad esempio martedì o lunedì). Mercoledì) e mese (febbraio).


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb.. 10 KB
I punti doppi indicano un intervallo di valori. Trova gli elementi con una data compresa tra 11/05/04 e 11/10/04, inclusi.
Trova elementi di dimensioni comprese tra 5 e 10 kb.

 

Restrizioni di ambito

Gli utenti possono limitare l'ambito delle ricerche a percorsi di cartelle o archivi dati specifici. Ad esempio, se si utilizzano diversi account di posta elettronica e si desidera limitare una query a Microsoft Outlook o Microsoft Outlook Express, è possibile utilizzare System.Search.Store:mapi o System.Search.Store:oe rispettivamente. La tabella seguente illustra alcuni esempi di come limitare una ricerca in base all'archivio dati.

Limitare la ricerca in base all'archivio dati Parola chiave Esempio
File file System.Search.Store:file
Outlook mapi System.Search.Store:mapi
Outlook Express oe System.Search.Store:oe
File offline Csc System.Search.Store:csc
Cartella specifica nell'unità locale cartella System.ItemFolderNameDisplay:C:"\MyFolder"

 

Risorse aggiuntive

  • In Windows 7 e versioni successive, un'opzione di menu di scelta rapida può essere disponibile in base al fatto che venga soddisfatta una condizione AQS. Per altre informazioni, vedere "Getting Dynamic Behavior for Static Verbs by Using Advanced Query Syntax" in Creating Context Menu Handlers .
  • Le query AQS possono essere limitate a tipi specifici di file, noti come tipi di file. Per altre informazioni, vedere Tipi di file e associazioni. Per la documentazione di riferimento sulle proprietà, vedere System.Kind e System.KindText.

Esecuzione di query sull'indice a livello di codice

Uso di approcci SQL e AQS per eseguire query sull'indice

Esecuzione di query sull'indice con ISearchQueryHelper

Esecuzione di query sull'indice con il protocollo search-ms

Esecuzione di query sull'indice con la sintassi SQL di Windows Search