Compartir a través de


Uso de la sintaxis de consulta avanzada mediante programación

La sintaxis de consulta avanzada (AQS) es la sintaxis de consulta predeterminada usada por Windows Search para consultar el índice y refinar y restringir los parámetros de búsqueda. Los desarrolladores emplean AQS para crear consultas mediante programación. Los usuarios, por su parte, utilizan esta sintaxis para restringir los parámetros de búsqueda. La sintaxis de consulta avanzada canónica se introdujo en Windows 7 y se debe usar en Windows 7 y versiones posteriores para generar consultas AQS mediante programación.

Este tema se organiza de la siguiente manera:

Acerca de la sintaxis de consulta avanzada

Una consulta consta de consultas básicas conectadas con AND, OR y NOT, como se muestra en el ejemplo de sintaxis siguiente:

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

Nota:

AQS no distingue mayúsculas de minúsculas, con la excepción de AND, OR y NOT, que deben estar en mayúsculas.

 

Si una consulta tiene dos o más usos de AND u OR, se enlazarán de izquierda a derecha, independientemente de si es AND u OR. Es decir, la consulta "manzana AND pera OR ciruela" se interpretará como si se escribiera como "(manzana Y pera) OR ciruela", y la consulta "manzana OR pera AND ciruela" se interpretará como si se escribiera como "(manzana O pera) AND ciruela". Por lo tanto, si un documento contiene la palabra ciruela pero no contiene manzana ni pera, la primera consulta lo devolverá, pero la segunda no. Por este motivo, se recomienda usar paréntesis explícitos para cualquier consulta que combine AND y OR para evitar errores de interpretación.

Una consulta básica busca elementos que cumplan una restricción de una propiedad. La única parte necesaria de una consulta básica es la restricción o valor de búsqueda. Si no se especifica una propiedad, Windows Search busca en todas las propiedades. <restr> representa la restricción de búsqueda.

Los siguientes formatos de consulta básica son válidos:

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

Una propiedad se designa mediante una palabra clave como author o size, o mediante un nombre de propiedad canónico como System.DateModified. Los formatos válidos para una propiedad son los siguientes:

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

Un operador indica una operación como < o =. Para ver la lista de operadores válidos, consulte la sección Operadores de consulta más adelante en este tema.

Una restricción básica es una restricción simple de una propiedad que se puede escribir sin paréntesis:

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

Una restricción es un valor de búsqueda, como un valor numérico o un valor de cadena, opcionalmente con un operador. Los formatos válidos para una restricción son los siguientes:

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

Si no especifica un operador, Windows Search elige el operador más adecuado para la consulta:

  • Para una propiedad de cadena, se asume el operador COP_WORD_STARTSWITH $<.
  • Para todas las demás propiedades, se asume el operador COP_EQUAL =.

Para el uso de AQS mediante programación, se recomienda tener siempre un operador explícito. El formato válido para buscar un valor simple o un intervalo de valores es el siguiente:

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

Un valor simple puede estar integrado por cualquiera de los tipos siguientes:

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

Ejemplos

Una consulta que busca un documento que contiene la fase "last quarter", creado por Theresa o Lee, y que se guardó en la carpeta MyDocs, combina tres consultas básicas de la siguiente manera:

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

Las tres consultas básicas son:

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

Una consulta básica que usa sintaxis canónica es:

System.Size:>1kb

Propiedades

Se hace referencia a las propiedades con una palabra clave, que puede ser un nombre de propiedad canónico en Windows 7 y versiones posteriores. En la interfaz de usuario de Windows, AQS puede usar la etiqueta en lugar del nombre de propiedad canónico, por ejemplo, author en lugar de System.Author. En Windows Vista y versiones anteriores era posible usar etiquetas en inglés independientemente del idioma de la interfaz de usuario. En Windows 7 y versiones posteriores, Windows Search solo reconoce palabras clave en el idioma predeterminado actual de la interfaz de usuario.

Compatibilidad con propiedades personalizadas

En Windows Vista y versiones anteriores, las propiedades personalizadas no estaban disponibles en AQS. En Windows 7 y versiones posteriores, AQS funciona con propiedades personalizadas registradas en el sistema de propiedades. Para obtener más información sobre cómo crear propiedades personalizadas, consulte Sistema de propiedades.

Propiedades DateTime en Windows 8

A partir de Windows 8, las propiedades DateTime (como System.DateModified) admiten el formato canónico de fecha y hora especificado por ISO-8601, que opcionalmente incluye la zona horaria UTC.

  • Windows 8 y versiones anteriores, fecha y hora sin zona horaria UTC: AAAA-MM-DDThh:mm:ss

    Este formato especifica una hora local, independientemente de la configuración regional del usuario o del sistema.

  • Windows 8, fecha y hora con zona horaria UTC: AAAA-MM-DDThh:mm:ssTZD

    Este formato especifica una hora de la zona horaria UTC especificada.

Uso de palabras clave en idiomas locales

En Windows 7 y versiones posteriores, las palabras clave nemotécnicas solo funcionan en el idioma del sistema. Por ejemplo, las palabras clave en alemán solo funcionan en un sistema operativo en alemán y las palabras clave en inglés solo funcionan en un sistema operativo en inglés. System.Author es una palabra clave canónica y el valor nemotécnico de la propiedad System.Author es Author, por ejemplo. La introducción de palabras clave canónicas compensa el hecho de que las palabras clave nemotécnicas en inglés ya no se reconocen universalmente en todos los sistemas operativos con independencia del idioma, como sucedía en Windows Vista y versiones anteriores.

Nota:

En Windows 7 y versiones posteriores, Windows Search solo reconoce palabras clave en el idioma predeterminado actual y no en inglés, a menos que el inglés sea el valor predeterminado actual. Se recomienda que los desarrolladores usen siempre la sintaxis canónica para que su aplicación no tenga problemas de idioma con palabras clave.

 

Sintaxis de consulta avanzada canónica en Windows 7

La sintaxis canónica para las palabras clave se introdujo en Windows 7. Un ejemplo de una consulta con una propiedad canónica es System.Message.FromAddress:=me@microsoft.com. Al programar consultas en aplicaciones que se ejecuten en Windows 7 y versiones posteriores, debe usar la sintaxis canónica para generar consultas AQS mediante programación. Si no usa la sintaxis canónica y la aplicación se implementa en un idioma de configuración regional o de interfaz de usuario diferente del idioma del código de la aplicación, las consultas no se interpretarán correctamente.

Las convenciones para la sintaxis de palabras clave canónicas son las siguientes:

  • La sintaxis canónica de una propiedad es su nombre canónico, como System.Photo.LightSource. Los nombres canónicos no distinguen mayúsculas y minúsculas.
  • La sintaxis canónica de los operadores booleanos consta de las palabras clave AND, OR y NOT, todas en mayúsculas.
  • Los operadores <, >, =, etc., no se traducen y, por tanto, también forman parte de la sintaxis canónica.
  • Si una propiedad P incluye una enumeración de valores o intervalos denominados N₁ a Nₖ, la sintaxis canónica para el valor o intervalo I es el nombre canónico de P, seguido del carácter #, seguido de NI, como se muestra en el ejemplo siguiente:
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardA, etc.
  • Para un tipo semántico definido T con valores o intervalos denominados N₁ a Nₖ, la sintaxis canónica para el valor o intervalo I es el nombre canónico de T, seguido del carácter #, seguido de NI, como se muestra en el ejemplo siguiente:
    • System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
  • Para valores de texto como palabras o frases, la sintaxis canónica coincide con la sintaxis normal. A continuación se muestran algunos ejemplos de consultas con valores de texto en sintaxis canónica:
    • System.Author:sanjay
    • System.Keywords:"Animal"
    • System.FileCount:>100

Nota:

No hay sintaxis canónica para números en Windows 7 y versiones posteriores. Dado que los formatos de punto flotante varían entre configuraciones regionales, no se admite el uso de una consulta canónica que implique una constante de punto flotante. Las constantes enteras, en cambio, se pueden escribir solo con dígitos (sin separadores de miles) y se pueden usar de forma segura en consultas canónicas en Windows 7 y versiones posteriores.

 

Ejemplos

En la tabla siguiente se muestran algunos ejemplos de propiedades canónicas y la sintaxis requerida para usarlas.

Tipo de propiedad canónica Ejemplo Sintaxis
Valor de cadena System.Author
Se busca el valor de cadena en la propiedad author:
System.Author:Jacobs
Intervalo de enumeración System.Priority La propiedad priority puede tener un intervalo numérico de valores:
System.Priority:System.Priority#High
Booleano System.IsDeleted
Los valores booleanos se pueden usar con cualquier propiedad booleana:
System.IsDeleted:System.StructuredQueryType.Boolean#True y System.IsDeleted:System.StructuredQueryType.Boolean#False
Numérico System.Size
No es posible escribir de forma segura una consulta canónica que implique una constante de punto flotante, ya que los formatos de punto flotante varían entre configuraciones regionales. Los enteros se deben escribir sin separadores de miles. Por ejemplo:
System.Size:<12345

 

Para obtener más información sobre las propiedades canónicas y el sistema de propiedades en general, consulte Propiedades del sistema. Como alternativa, consulte los archivos de encabezado públicos.

Operadores de consulta

Si una propiedad, p, tiene varios valores para algún elemento, una consulta de AQS para p:<restr> devuelve el elemento si <restr> es true para al menos uno de los valores. (<restr> representa una restricción).

La sintaxis que se muestra en la tabla siguiente consta de un operador, un símbolo de operador, un ejemplo y una descripción del ejemplo. El operador y el símbolo se pueden usar en cualquier idioma y se pueden incluir en cualquier consulta. No use los operadores COP_IMPLICIT ni COP_APPLICATION_SPECIFIC. Algunos de los operadores tienen símbolos intercambiables.

Operador Símbolo Ejemplo Descripción
COP_EQUAL =
System.FileExtension:=".txt"
El valor es la cadena ".txt".
COP_NOTEQUAL
-
<>
NOT
- -
System.Kind:≠picture
System.Photo.DateTaken:-[]¹
System.Kind:<>picture
System.Kind:NOT picture
System.Kind:- -picture
La propiedad System.Kind no es una imagen.
La propiedad System.Photo.DateTaken tiene un valor.
La propiedad System.Kind no es una imagen.
La propiedad System.Kind no es una imagen.
Los operadores NOT dobles aplicados a la misma propiedad no se cancelan mutuamente. Por lo tanto, System.Kind:- -picture es equivalente a System.Kind:-picture y a System.Kind:NOT picture.
COP_LESSTHAN <
System.Size:<1kb
Este valor es menor que 1kb.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
Este valor es mayor que today.
COP_LESSTHANOREQUAL <=

System.Size:<=1kb
El valor es menor o igual que 1kb.
COP_GREATERTHANOREQUAL >=

System.Size:>=1kb
El valor es igual o mayor que 1kb.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ Primer"
Busca elementos en los que el nombre de archivo comienza con los caracteres "C++ Primer".
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>non
Busca elementos en los que el valor de propiedad termina con los caracteres non.
COP_VALUE_CONTAINS ~=
~~
System.Subject.~=round
System.Search.Autosummary:~~round
Busca un mensaje que tenga esta cadena en el asunto y encontrará, por ejemplo, "ground rules".
Busca todos los elementos con Autosummary que contenga los caracteres round.
COP_VALUE_NOTCONTAINS ~!
System.Author:~!"sanjay"
Busca autores que no contengan la secuencia de caracteres "sanjay".
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
Busca archivos cuyo nombre comience con Mic, seguido de algún carácter, seguido de osoft w, seguido de cualesquiera caracteres que terminen con d.
El signo ? y el carácter * no se interpretan literalmente y funcionan como caracteres comodín al estilo de DOS:
  • ? representa un carácter arbitrario.
  • * representa cero o más caracteres arbitrarios.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Para Windows 7 y versiones posteriores. Busca la frase "Sanjay Jacobs" en todas las propiedades From. La palabra Sanjay debe ir seguida de la palabra Jacobs.
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Para Windows 7 y versiones posteriores. Busca cualquier elemento en el que Author contenga una palabra que empiece con los caracteres "San".
Busca cualquier archivo en el que el nombre de archivo contenga una palabra que empiece por micro, seguida de una palabra que empiece por exe.

 

¹ Los corchetes vacíos ([]) significan "ningún valor".

En el caso de las propiedades de cadena, la operación predeterminada es COP_WORD_STARTS_WITH o COP_WORD_EQUAL.

Valores de consulta

En la tabla siguiente se muestran ejemplos útiles de cómo se pueden restringir los valores de consulta.

Valor/símbolo Ejemplos Descripción
Cadena auto
Cualquier secuencia de caracteres que se pueda buscar. La cadena no debe contener combinaciones de espacios en blanco ni caracteres que formen parte de la sintaxis. En este ejemplo se busca una palabra que empiece por auto.
Cadena entrecomillada "" "Conclusiones: válidas" "El equipo ""azul"""
Cualquier secuencia de caracteres. La cadena no se interpreta como parte de la sintaxis.
Las comillas se pueden incluir en una consulta si se duplican. En este ejemplo se busca El equipo "azul".
Entero 5678
Use solo dígitos para representar números enteros. No use ningún separador de miles.
Número de punto flotante 5678.1234
Dado que los formatos de punto flotante varían entre configuraciones regionales, una consulta canónica no puede usar una constante de punto flotante. El uso de sintaxis canónica con números de punto flotante no es seguro para la localización.
Booleano true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
El valor booleano TRUE.
El valor booleano FALSE.
[] System.Keywords:=[]
Los corchetes vacíos indican que no hay ningún valor. En este ejemplo se buscan todos los elementos que no se han etiquetado.
Fechas absolutas System.ItemDate:1/26/2010
SystemDateModified 10/15/2002 19:00
Busca elementos con una fecha del 26 de enero de 2010.
Busca elementos modificados el 15 de octubre de 2002 entre las horas 19:00:00 y 19:00:59.

Nota:
Dado que los formatos de fecha (como los formatos de punto flotante) varían entre configuraciones regionales, el uso de la sintaxis canónica no se admite con fechas absolutas y no es seguro para la localización.


Fechas relativas System.ItemDate:System.StructuredQueryType.DateTime#Today
System.DateAcquired:System.StructuredQueryType.DateTime#NextMonth
System.Message.DateReceived:System.StructuredQueryType.DateTime#LastYear
Busca elementos con la fecha de hoy.
Busca elementos con una fecha en el mes próximo.
Busca elementos con una fecha en el último año.

Nota:
Además de buscar en fechas y intervalos de fechas concretos, AQS reconoce valores de fecha relativos (como today, tomorrow, nextweek, nextmonth), y de día (como Tuesday o Monday..Wednesday) y mes (February).


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb..10kb
Los puntos dobles indican un intervalo de valores. Busca elementos con una fecha entre el 11/05/04 y el 11/10/04, ambos incluidos.
Busca elementos entre 5 y 10 kb de tamaño.

 

Restricciones de ámbito

Los usuarios pueden limitar el ámbito de sus búsquedas a ubicaciones de carpetas o almacenes de datos concretos. Por ejemplo, si usa varias cuentas de correo electrónico y desea limitar una consulta a Microsoft Outlook o Microsoft Outlook Express, puede usar System.Search.Store:mapi o System.Search.Store:oe, respectivamente. En la tabla siguiente se muestran algunos ejemplos de la restricción de una búsqueda por almacén de datos.

Restricción de la búsqueda por almacén de datos Palabra clave Ejemplo
Archivos file System.Search.Store:file
Outlook mapi System.Search.Store:mapi
Outlook Express oe System.Search.Store:oe
Archivos sin conexión csc System.Search.Store:csc
Carpeta concreta en la unidad local folder System.ItemFolderNameDisplay:C:"\MyFolder"

 

Recursos adicionales

  • En Windows 7 y versiones posteriores, una opción de menú contextual puede estar disponible en función de si se cumple una condición de AQS. Para obtener más información, vea "Obtener el comportamiento dinámico para verbos estáticos mediante la sintaxis de consulta avanzada" en Crear controladores de menú contextual.
  • Las consultas AQS pueden limitarse a tipos específicos de archivos, que se conocen como clases de archivo. Para obtener más información, consulte Tipos y asociaciones de archivos. Para obtener documentación de referencia sobre las propiedades, consulte System.Kind y System.KindText.

Consulta del índice mediante programación

Uso de métodos SQL y AQS para consultar el índice

Consulta del índice con ISearchQueryHelper

Consulta del índice con el protocolo search-ms

Consulta del índice con la sintaxis SQL de Windows Search