Partager via


Utilisation de la syntaxe de requête avancée par programmation

La syntaxe de requête avancée (AQS) est la syntaxe de requête par défaut utilisée par Windows Search pour interroger l’index et affiner les paramètres de recherche. L’AQS est utilisée par les développeurs pour générer des requêtes par programmation (et par les utilisateurs pour affiner leurs paramètres de recherche). L’AQS canonique a été introduite dans Windows 7 et doit être utilisée dans Windows 7 et les versions ultérieures pour générer des requêtes AQS par programmation.

Cette rubrique est organisée comme suit :

À propos de la syntaxe de requête avancée

Une requête se compose de requêtes de base reliées par AND, OR et NOT, comme le montre l’exemple de syntaxe suivant :

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

Remarque

L’AQS n’est pas sensible à la casse, sauf AND, OR et NOT, qui doivent être en majuscules.

 

Si une requête comporte au moins deux utilisations de AND ou OR, elles seront liées de gauche à droite, sans distinction entre AND et OR. Autrement dit, la requête, « pomme ET poire OU prune » sera interprétée comme si elle était écrite : « (pomme ET poire) OU prune», et la requête, « pomme OU poire ET prune », sera interprétée comme si elle était écrite : « (pomme OU poire) ET prune ». Ainsi, si un document contient le mot « prune » mais ne contient ni « pomme », ni « poire », la première requête le renverra, mais la deuxième requête ne le fera pas. Nous vous recommandons donc d’utiliser des parenthèses explicites pour toute requête qui mélange AND et OR pour éviter les erreurs ou les mauvaises interprétations.

Une requête de base recherche des éléments qui répondent à une restriction sur une propriété. La seule partie requise d’une requête de base est la restriction ou la valeur de recherche. Si vous ne spécifiez pas de propriété, Windows Search les recherche toutes. <restr> représente la restriction de recherche.

Les formulaires suivants pour une requête de base sont valides :

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

Une propriété est désignée par un mot clé tel que l’auteur ou la taille, ou par un nom de propriété canonique comme System.DateModified. Les formulaires valides pour une propriété sont les suivants :

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

Un opérateur indique une opération telle que < ou =. Pour obtenir la liste des opérateurs valides, consultez la section « Opérateurs de requête » plus loin dans cette rubrique.

Une restriction de base est une restriction simple sur une propriété qui peut être écrite sans parenthèses :

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

Une restriction est une valeur de recherche comme une valeur numérique ou une valeur de chaîne, éventuellement avec un opérateur. Les formulaires valides pour une restriction sont les suivants :

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

Si vous ne spécifiez pas d’opérateur, Windows Search choisit le plus approprié pour votre requête :

  • Pour une propriété de chaîne, l’opérateur COP_WORD_STARTSWITH $< est supposé.
  • Pour toutes les autres propriétés, l’opérateur COP_EQUAL = est supposé.

Pour l’utilisation de l’AQS par programmation, nous vous recommandons de toujours disposer d’un opérateur explicite. Le formulaire valide pour la recherche d’une valeur ou d’une plage de valeurs simple est le suivant :

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

Une valeur simple peut être de l’un des types suivants :

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

Exemples

Une requête qui effectue une recherche dans un document contenant la phase « dernier trimestre », dont l’auteur est Theresa ou Lee, et qui a été enregistré dans le dossier MyDocs, combine les trois requêtes de base suivantes :

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

Les trois requêtes de base sont les suivantes :

  • « trimestre dernier »
  • auteur :(theresa OU lee)
  • dossier :MyDocs

Une requête de base qui utilise la syntaxe canonique est la suivante :

System.Size:>1kb

Propriétés

Les propriétés sont référencées par un mot clé, qui peut être un nom de propriété canonique dans Windows 7 et les versions ultérieures. L’AQS dans l’interface utilisateur Windows peut utiliser l’étiquette au lieu du nom de propriété canonique, notamment l’auteur au lieu de System.Author. Dans Windows Vista et les versions antérieures, il était possible d’utiliser des étiquettes anglaises, indépendamment de la langue de l’interface utilisateur. Dans Windows 7 et les versions ultérieures, Windows Search reconnaît les mots clés uniquement dans le langage d’interface utilisateur par défaut actuel.

Prise en charge des propriétés personnalisées

Dans Windows Vista et les versions antérieures, les propriétés personnalisées n’étaient pas disponibles dans l’AQS. Dans Windows 7 et les versions ultérieures, l’AQS fonctionne avec des propriétés personnalisées enregistrées auprès du système de propriétés. Pour en savoir plus sur la création de propriétés personnalisées, consultez Système de propriétés.

Propriétés DateTime dans Windows 8

À compter de Windows 8, les propriétés DateTime (comme System.DateModified) prennent en charge le format de date et d’heure canonique spécifié par la norme ISO-8601, y compris éventuellement le fuseau horaire UTC.

  • Windows 8 et les versions antérieures, date-heure sans fuseau horaire UTC : AAAA-MM-JJThh:mm:ss

    Ce format spécifie une heure locale, quels que soient les paramètres régionaux de l’utilisateur ou du système.

  • Windows 8, date-heure avec fuseau horaire UTC : AAAA-MM-JJThh:mm:ssTZD

    Ce format spécifie une heure au fuseau horaire UTC spécifié.

Utilisation du mot clé dans les langues locales

Dans Windows 7 et les versions ultérieures, les mots clés mnémoniques fonctionnent uniquement dans la langue du système : les mots clés allemands uniquement sur un système d’exploitation allemand et les mots clés anglais uniquement sur un système d’exploitation anglais. System.Author est un mot clé canonique, et la valeur mnémonique de la propriété System.Author est Author, par exemple. L’introduction de mots-clés canoniques compense le fait que les mots-clés mnémoniques anglais ne sont plus universellement reconnus sur tous les systèmes d’exploitation, quelle que soit la langue, comme c’était le cas dans Windows Vista et les versions antérieures.

Remarque

Dans Windows 7 et les versions ultérieures, Windows Search reconnaît les mots clés uniquement dans la langue par défaut actuelle, et non en anglais, sauf si l’anglais est la langue par défaut actuelle. Nous recommandons aux développeurs de toujours utiliser la syntaxe canonique pour éviter que leur application ne rencontre des problèmes de langue avec les mots clés.

 

Syntaxe de requête avancée canonique dans Windows 7

La syntaxe canonique a été introduite pour les mots clés dans Windows 7. System.Message.FromAddress:=me@microsoft.com est un exemple de requête avec une propriété canonique. Lorsque vous codez des requêtes dans des applications s’exécutant sur Windows 7 et les versions ultérieures, vous devez utiliser la syntaxe canonique pour générer des requêtes AQS par programmation. Si vous n’utilisez pas la syntaxe canonique et que votre application est déployée dans une langue locale ou une langue d’interface utilisateur différente de la langue du code de l’application, vos requêtes ne seront pas interprétées correctement.

Les conventions de syntaxe de mot clé canonique sont les suivantes :

  • La syntaxe canonique d’une propriété est son nom canonique, par exemple System.Photo.LightSource. Les noms canoniques ne sont pas sensibles à la casse.
  • La syntaxe canonique pour les opérateurs booléens se compose des mots clés AND, OR et NOT, en majuscules.
  • Les opérateurs <, = >, etc., ne sont pas localisés et font donc également partie de la syntaxe canonique.
  • Si une propriété P a énuméré des valeurs ou des plages nommées N₁ à Nk, la syntaxe canonique de la Ire valeur ou plage est le nom canonique pour P, suivi du caractère #, suivi de NI, comme le montre l’exemple suivant :
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardA, etc.
  • Pour un type sémantique défini T avec des valeurs ou des plages nommées N₁ à Nk, la syntaxe canonique pour la Ire valeur ou plage est le nom canonique pour T, suivi du caractère #, suivi de NI, comme le montre l’exemple suivant :
    • System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
  • Pour les valeurs littérales telles que des mots ou des expressions, la syntaxe canonique est identique à la syntaxe régulière. Voici quelques exemples de requêtes avec des valeurs littérales dans la syntaxe canonique :
    • System.Author:sanjay
    • System.Keywords:"Animal"
    • System.FileCount:>100

Remarque

Il n’existe pas de syntaxe canonique pour les nombres dans Windows 7 et les versions ultérieures. Étant donné que les formats à virgule flottante varient selon les paramètres régionaux, l’utilisation d’une requête canonique impliquant une constante à virgule flottante n’est pas prise en charge. En revanche, les constantes entières peuvent être écrites uniquement à l’aide de chiffres (sans séparateur pour les milliers) et peuvent être utilisées en toute sécurité dans les requêtes canoniques dans Windows 7 et les versions ultérieures.

 

Exemples

Le tableau suivant présente quelques exemples des propriétés canoniques et de la syntaxe à utiliser.

Type de propriété canonique Exemple Syntaxe
Valeur de chaîne System.Author
La valeur de chaîne est recherchée dans la propriété auteur :
System.Author:Jacobs
Plage d’énumération System.Priority La propriété de priorité peut avoir une plage de valeurs numériques :
System.Priority:System.Priority#High
Boolean System.IsDeleted
Les valeurs booléennes peuvent être utilisées avec n’importe quelle propriété booléenne :
System.IsDeleted:System.StructuredQueryType.Boolean#True, et System.IsDeleted:System.StructuredQueryType.Boolean#False
Numérique System.Size
Il est impossible d’écrire en toute sécurité une requête canonique qui implique une constante à virgule flottante, car les formats de ce type varient selon les paramètres régionaux. Les entiers doivent être écrits sans séparateurs pour les milliers. Par exemple :
System.Size:<12345

 

Pour en savoir plus sur les propriétés canoniques et le système de propriétés en général, consultez Propriétés système. Vous pouvez également consulter les fichiers d’en-tête publics.

Opérateurs de requête

Si une propriété, p, a plusieurs valeurs pour un élément, une requête AQS pour p :<restr> renvoie l’élément si <restr> est true pour au moins une des valeurs. (<restr> représente une restriction).

La syntaxe répertoriée dans le tableau suivant se compose d’un opérateur, d’un symbole d’opérateur, d’un exemple et d’une description d’exemple. L’opérateur et le symbole peuvent être utilisés dans n’importe quelle langue et inclus dans n’importe quelle requête. N’utilisez pas les opérateurs COP_IMPLICIT ou COP_APPLICATION_SPECIFIC. Certains opérateurs ont des symboles interchangeables.

Opérateur Symbole Exemple Description
COP_EQUAL =
System.FileExtension:=".txt"
La valeur est la chaîne ".txt".
COP_NOTEQUAL
-
<>
NOT
- -
System.Kind:≠picture
System.Photo.DateTaken:-[]¹
System.Kind:<>picture
System.Kind:NOT picture
System.Kind:- -picture
La propriété System.Kind n’est pas une image.
La propriété System.Photo.DateTaken a une valeur.
La propriété System.Kind n’est pas une image.
La propriété System.Kind n’est pas une image.
Les opérateurs avec un double NOT appliqués à la même propriété n’annulent pas. Par conséquent, System.Kind:- -picture équivaut à System.Kind:-picture et System.Kind:NOT picture.
COP_LESSTHAN <
System.Size:<1kb
Cette valeur est inférieure à 1 Ko.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
Cette valeur est supérieure à aujourd’hui.
COP_LESSTHANOREQUAL <=

System.Size:<=1kb
Cette valeur est inférieure ou égale à 1 Ko.
COP_GREATERTHANOREQUAL >=

System.Size:>=1kb
Cette valeur est égale ou supérieure à 1 Ko.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ Primer"
Recherche les éléments dans lesquels le nom de fichier commence par les caractères « C++ Primer ».
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>non
Recherche les éléments où la valeur de propriété se termine par les caractères non.
COP_VALUE_CONTAINS ~=
~~
System.Subject.~=round
System.Search.Autosummary:~~round
Recherche un message contenant cette chaîne dans l’objet et correspond à « règles ground » par exemple.
Recherche tous les éléments avec un Autosummary qui contient les caractères round.
COP_VALUE_NOTCONTAINS ~!
System.Author:~!"sanjay"
Trouve les auteurs qui n’incluent pas la séquence de caractères « sanjay ».
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
Recherche les fichiers où le nom de fichier commence par Mic, suivi d’un caractère, suivi d’osoft w, suivi de tous les caractères se terminant par d.
Le point d’interrogation, ?, et * ne sont pas interprétés littéralement, et fonctionnent comme des caractères génériques de style DOS :
  • ? correspond à un caractère arbitraire.
  • * correspond à zéro ou à un ou plusieurs caractères arbitraires.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Pour Windows 7 et les versions ultérieures. Trouve l’expression « Sanjay Jacobs » dans toutes les propriétés De. Le mot Sanjay doit être suivi du mot Jacobs.
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Pour Windows 7 et les versions ultérieures. Recherche n’importe quel élément où Auteur contient un mot commençant par les caractères « San ».
Recherche tout fichier dans lequel le nom de fichier contient un mot commençant par micro, suivi d’un mot commençant par exe.

 

¹ Des crochets vides ([]) indiquent « aucune valeur ».

Pour les propriétés de chaîne, l’opération par défaut est COP_WORD_STARTS_WITH ou COP_WORD_EQUAL.

Demander des valeurs

Le tableau suivant présente des exemples utiles de la façon dont les valeurs de requête peuvent être restreintes.

Valeur/symbole Exemples Description
Chaîne auto
Toute séquence de caractères pouvant faire l’objet d’une recherche. La chaîne ne doit pas contenir d’espaces blancs ou de combinaisons de caractères qui font partie de la syntaxe. Cet exemple présente la recherche d’un mot commençant par auto.
Chaîne entre guillemets «  » « Conclusions : valide » « The "blue" team »
N’importe quelle séquence de caractères. La chaîne n’est pas interprétée comme une partie de la syntaxe.
Les guillemets peuvent être inclus dans une requête s’ils sont doublés. Cet exemple recherche l’équipe« bleue ».
Integer 5678
Utilisez uniquement des chiffres pour les entiers. N’utilisez pas de séparateurs pour les milliers.
Nombre à virgule flottante 5678.1234
Étant donné que les formats à virgule flottante varient selon les paramètres régionaux, une requête canonique ne peut pas utiliser une constante à virgule flottante. L’utilisation de la syntaxe canonique avec des nombres à virgule flottante n’est pas sûre.
Valeur boléenne true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
Valeur booléenne TRUE.
Valeur booléenne FALSE.
[] System.Keywords:=[]
Les crochets vides indiquent qu’il n’existe aucune valeur. Cet exemple recherche tous les éléments qui n’ont pas été balisés.
Dates absolues System.ItemDate:1/26/2010
SystemDateModified 10/15/2002 19:00
Recherche des éléments avec la date du 26 janvier 2010.
Recherche les éléments modifiés le 15 octobre 2002 entre 19:00:00 et 19:00:59.

Remarque :
Étant donné que les formats de date (comme les formats à virgule flottante) varient selon les paramètres régionaux, l’utilisation de la syntaxe canonique avec des dates absolues n’est pas prise en charge et n’est pas sûre.


Dates relatives System.ItemDate:System.StructuredQueryType.DateTime#Today
System.DateAcquired:System.StructuredQueryType.DateTime#NextMonth
System.Message.DateReceived:System.StructuredQueryType.DateTime#LastYear
Recherche des éléments avec la date d’aujourd’hui.
Recherche des éléments avec une date dans le mois suivant.
Recherche des éléments avec une date dans l’année dernière.

Remarque :
Outre la recherche à des dates et dans des plages de dates spécifiques, l’AQS reconnaît les valeurs de date relatives (comme aujourd’hui, demain, semaine prochaine, mois prochain), de jour (comme mardi ou lundi..mercredi) et de mois (février).


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb..10kb
Les points doubles indiquent une plage de valeurs. Recherche des éléments avec une date comprise entre 11/05/04 et 11/10/04, toutes deux incluses.
Recherche les éléments d’une taille comprise entre 5 et 10 Ko.

 

Restrictions de l’étendue

Les utilisateurs peuvent limiter l’étendue de leurs recherches à des emplacements de dossiers spécifiques ou à des magasins de données. Ainsi, si vous utilisez plusieurs comptes e-mail et que vous souhaitez limiter une requête à Microsoft Outlook ou Microsoft Outlook Express, vous pouvez utiliser System.Search.Store:mapi ou System.Search.Store:oe respectivement. Le tableau suivant montre quelques exemples de la façon de restreindre une recherche par magasin de données.

Restreindre la recherche par magasin de données Mot clé Exemple
Fichiers file System.Search.Store:file
Outlook mapi System.Search.Store:mapi
Outlook Express oe System.Search.Store:oe
Fichiers hors connexion csc System.Search.Store:csc
Dossier spécifique sur le lecteur local dossier System.ItemFolderNameDisplay:C:"\MyFolder"

 

Ressources complémentaires

  • Dans Windows 7 et les versions ultérieures, une option de menu contextuel peut être disponible selon qu’une condition AQS est remplie. Pour en savoir plus, consultez « Obtenir un comportement dynamique pour les verbes statiques au moyen d’une syntaxe de requête avancée » dans Création de gestionnaires de menu contextuel.
  • Les requêtes AQS peuvent être limitées à des types de fichiers spécifiques, appelés types de fichiers. Pour en savoir plus, voir Types et associations de fichiers. Pour obtenir la documentation de référence sur les propriétés, consultez System.Kind et System.KindText.

Interrogation de l’index programmatiquement

Utilisation des approches SQL et AQS pour interroger l’index

Interrogation de l’index avec ISearchQueryHelper

Interrogation de l’index avec le protocole search-ms

Interrogation de l’index avec la syntaxe SQL de Windows Search