Partilhar via


Usando a sintaxe de consulta avançada programaticamente

A Sintaxe de Consulta Avançada (AQS) é a sintaxe de consulta padrão usada pelo Windows Search para consultar o índice e refinar e restringir os parâmetros de pesquisa. O AQS é empregado por desenvolvedores para criar consultas programaticamente (e por usuários para restringir seus parâmetros de pesquisa). O AQS canônico foi introduzido no Windows 7 e deve ser usado no Windows 7 e posterior para gerar consultas AQS programaticamente.

Este tópico está organizado da seguinte forma:

Sobre a sintaxe de consulta avançada

Uma consulta consiste em consultas básicas conectadas com E, OU e NÃO, conforme mostrado na sintaxe de exemplo a seguir:

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

Observação

O AQS não diferencia maiúsculas de minúsculas, com exceção dos operadores E, OU e NÃO, que devem ser escritos em maiúsculas.

 

Se uma consulta tiver dois ou mais usos de E ou OU, as ligações serão feitas da esquerda para a direita, independentemente de ser E ou OU. Ou seja, a consulta, "maçã E pera OU ameixa" será interpretada como se estivesse escrita como "(maçã E pera) OU ameixa", e a consulta, "maçã OU pera E ameixa", será interpretada como se estivesse escrita como "(maçã OU pera) E ameixa". Assim, se um documento contiver a palavra ameixa mas nem maçã, nem pera, a primeira consulta irá devolvê-la, mas a segunda consulta não. Portanto, recomendamos que você use parênteses explícitos para qualquer consulta que misture E e OU para evitar erros ou interpretações incorretas.

Uma consulta básica procura itens que satisfaçam uma restrição sobre uma propriedade. A única parte necessária de uma consulta básica é a restrição ou o valor de pesquisa. Se você não especificar uma propriedade, o Windows Search pesquisará todas as propriedades. <restr> representa a restrição de pesquisa.

Os seguintes formulários para uma consulta básica são válidos:

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

Uma propriedade é designada por uma palavra-chave, como autor ou tamanho, ou por um nome de propriedade canônica, como System.DateModified. Os formulários válidos para uma propriedade são os seguintes:

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

Um operador indica uma operação como < ou =. Para obter uma lista de operadores válidos, consulte a seção Operadores de consulta mais adiante neste tópico.

Uma restrição básica é uma restrição simples em uma propriedade que pode ser escrita sem parênteses:

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

Uma restrição é um valor de pesquisa, como um valor numérico ou um valor de cadeia de caracteres, opcionalmente com um operador. Os formulários válidos para uma restrição são os seguintes:

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

Se você não especificar um operador, o Windows Search escolherá o operador mais apropriado para sua consulta:

  • Para uma propriedade string, o operador COP_WORD_STARTSWITH $< é assumido.
  • Para todas as outras propriedades, o operador COP_EQUAL = é assumido.

Para o uso programático do AQS, recomendamos que você sempre tenha um operador explícito. O formulário válido para pesquisar um valor simples ou intervalo de valores é o seguinte:

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

Um valor simples pode consistir em qualquer um dos seguintes tipos:

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

Exemplos

Uma consulta que procura um documento contendo a fase "último trimestre", de autoria de Theresa ou Lee, e que foi salvo na pasta MyDocs, combina três consultas básicas da seguinte maneira:

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

As três consultas básicas são:

  • "último trimestre"
  • autor:(theresa OR lee)
  • pasta:MyDocs

Uma consulta básica que usa sintaxe canônica é:

System.Size:>1kb

Propriedades

As propriedades são referidas por uma palavra-chave, que pode ser um nome de propriedade canonico no Windows 7 e em versões posteriores. O AQS na interface de utilizador do Windows pode usar a etiqueta em vez do nome da propriedade canónica, como autor em vez de System.Author. No Windows Vista e versões anteriores, era possível usar rótulos em inglês independentemente do idioma da interface do usuário. No Windows 7 e versões posteriores, o Windows Search reconhece palavras-chave apenas no idioma padrão da interface do usuário atual.

Suporte para propriedades personalizadas

No Windows Vista e anteriores, as propriedades personalizadas não estavam disponíveis no AQS. No Windows 7 e versões posteriores, o AQS funciona com propriedades personalizadas registradas no sistema de propriedades. Para obter mais informações sobre como criar propriedades personalizadas, consulte Property System.

Propriedades DateTime no Windows 8

A partir do Windows 8, as propriedades DateTime (como System.DateModified) suportam o formato canônico de data e hora especificado pelo ISO-8601, opcionalmente incluindo o fuso horário UTC.

  • Windows 8 e anteriores, data-hora sem fuso horário UTC:AAAA-MM-DDThh:mm:ss

    Esse formato especifica uma hora local, independentemente da localidade do usuário ou do sistema.

  • Windows 8, data-hora com fuso horário UTC:AAAA-MM-DDThh:mm:ssTZD

    Este formato especifica uma hora no fuso horário UTC especificado.

Uso de palavras-chave em idiomas locais

No Windows 7 e versões posteriores, as palavras-chave mnemônicas funcionam apenas no idioma do sistema, como palavras-chave em alemão somente em um sistema operacional alemão e palavras-chave em inglês somente em um sistema operacional em inglês. System.Author é uma palavra-chave canônica e o valor mnemônico para a propriedade System.Author é Author, por exemplo. A introdução de palavras-chave canônicas compensa o fato de que as palavras-chave mnemônicas em inglês não são mais universalmente reconhecidas em todos os sistemas operacionais, independentemente do idioma, como era o caso no Windows Vista e anteriores.

Observação

No Windows 7 e versões posteriores, o Windows Search reconhece palavras-chave apenas no idioma padrão atual, e não em inglês, a menos que o inglês seja o padrão atual. Recomendamos que os desenvolvedores sempre usem sintaxe canônica para que seu aplicativo não tenha problemas de linguagem com palavras-chave.

 

Sintaxe de consulta avançada canônica no Windows 7

A sintaxe canônica foi introduzida para palavras-chave no Windows 7. Um exemplo de uma consulta com uma propriedade canônica é System.Message.FromAddress:=me@microsoft.com. Ao codificar consultas em aplicativos executados no Windows 7 e posterior, você deve usar sintaxe canônica para gerar consultas AQS programaticamente. Se você não usar sintaxe canônica e seu aplicativo for implantado em uma localidade ou idioma da interface do usuário diferente do idioma no código do aplicativo, suas consultas não serão interpretadas corretamente.

As convenções para sintaxe canônica de palavras-chave são as seguintes:

  • A sintaxe canônica de uma propriedade é seu nome canônico, como System.Photo.LightSource. Os nomes canônicos não diferenciam maiúsculas de minúsculas.
  • A sintaxe canônica para os operadores booleanos consiste nas palavras-chave AND, OR e NOT, em maiúsculas.
  • Os operadores <, >, =, e assim por diante, não estão localizados e, portanto, também fazem parte da sintaxe canônica.
  • Se uma propriedade P tiver valores enumerados ou intervalos denominados N₁ a Nk, a sintaxe canônica para o Ivalor ou intervalo é o nome canônico para P, seguido pelo caractere #, seguido por NI, conforme ilustrado no exemplo a seguir:
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardAe assim por diante.
  • Para um tipo semântico definido T com valores ou intervalos denominados N₁ a Nk, a sintaxe canônica para o Ith valor ou intervalo é o nome canônico para T, seguido pelo caractere #, seguido por NI, conforme ilustrado no exemplo a seguir:
    • System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
  • Para valores literais, como palavras ou frases, a sintaxe canônica é a mesma que a sintaxe regular. Exemplos de consultas com valores literais em sintaxe canônica são:
    • System.Author:sanjay
    • System.Keywords:"Animal"
    • System.FileCount:>100

Observação

Não há sintaxe canônica para números no Windows 7 e posterior. Como os formatos de ponto flutuante variam entre localidades, não há suporte para o uso de uma consulta canônica que envolva uma constante de ponto flutuante. As constantes inteiras, por outro lado, podem ser escritas usando apenas dígitos (sem separadores para milhares) e podem ser usadas com segurança em consultas canônicas no Windows 7 e posterior.

 

Exemplos

A tabela a seguir mostra alguns exemplos de propriedades canônicas e a sintaxe para usá-las.

Tipo de propriedade canônica Exemplo Sintaxe
Valor da cadeia de caracteres System.Author
O valor da cadeia de caracteres é pesquisado na propriedade author:
System.Author:Jacobs
Intervalo de enumeração Sistema.Prioridade A propriedade priority pode ter um intervalo de valores numéricos:
System.Priority:System.Priority#High
Booleano System.IsDeleted
Os valores booleanos podem ser usados com qualquer propriedade booleana:
System.IsDeleted:System.StructuredQueryType.Boolean#Truee System.IsDeleted:System.StructuredQueryType.Boolean#False
Numérico System.Size
Não é possível escrever com segurança uma consulta canônica que envolva uma constante de ponto flutuante, porque os formatos de ponto flutuante variam entre as localidades. Inteiros devem ser escritos sem separadores de milhares. Por exemplo:
System.Size:<12345

 

Para obter mais informações sobre propriedades canônicas e o sistema de propriedades em geral, consulte Propriedades do sistema. Como alternativa, consulte os arquivos de cabeçalho públicos.

Operadores de consulta

Se uma propriedade, p, tiver vários valores para algum item, uma consulta AQS para p:<restr> retornará o item se <> restr for true para pelo menos um dos valores. (<restr> representa uma restrição.)

A sintaxe listada na tabela a seguir consiste em um operador, símbolo de operador, exemplo e descrição de exemplo. O operador e o símbolo podem ser usados em qualquer idioma e incluídos em qualquer consulta. Não utilize os COP_IMPLICIT ou COP_APPLICATION_SPECIFIC operadores. Alguns dos operadores têm símbolos intercambiáveis.

Operador Símbolo Exemplo Descrição
COP_EQUAL =
System.FileExtension:=".txt"
O valor é a string ".txt".
COP_NOTEQUAL
-
<>
NÃO
- -
System.Kind: ≠imagem
System.Photo.DateTaken:-[]¹
System.Kind:<>imagem
Sistema.Tipo: NÃO imagem
System.Kind:- -picture
A propriedade System.Kind não é uma imagem.
A propriedade System.Photo.DateTaken possui um valor.
A propriedade System.Kind não é uma imagem.
A propriedade System.Kind não é uma imagem.
Operadores duplos NÃO aplicados à mesma propriedade não se anulam. Portanto, System.Kind:- -picture é equivalente a System.Kind:-imagem e System.Kind:NOT imagem.
COP_LESSTHAN <
System.Tamanho:<1 KB
Este valor é inferior a 1kb.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Hoje
Este valor é maior do que hoje.
COP_LESSTHANOREQUAL <=

System.Size:<= 1kb
Este valor é menor ou igual a 1kb.
COP_MAIOROUIQUAL >=

System.Size:>= 1kb
Este valor é igual ou superior a 1kb.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ Primer"
Localiza itens em que o nome do arquivo começa com os caracteres "C++ Primer".
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>não
Localiza itens em que o valor da propriedade termina com os caracteres não.
COP_VALOR_CONTÉM ~=
~~
System.Subject.~=circular
System.Search.Autosummary:~~round
Localiza uma mensagem que tem essa cadeia de caracteres no assunto, correspondendo a "gregras redondas", por exemplo.
Localiza todos os itens com um Resumo Automático que contém os caracteres round.
VALOR_COP_NÃO_CONTÉM ~!
System.Author:~!" Sanjay"
Encontra autores que não têm a sequência de personagens"sanjay" neles.
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
Localiza arquivos onde o nome do arquivo começa com Mic, seguido por algum caractere, seguido por osoft w, seguido por quaisquer caracteres terminados com d.
O ? e * os caracteres não são interpretados literalmente e funcionam como caracteres curinga no estilo DOS:
  • ? corresponde a um único caractere arbitrário.
  • * corresponde a zero ou mais caracteres arbitrários.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Para Windows 7 e versões posteriores. Encontra a expressão "Sanjay Jacobs" em todas as propriedades From. A palavra Sanjay deve ser seguida pela palavra Jacobs.
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Para Windows 7 e versões posteriores. Encontra qualquer item em que o Autor contenha uma palavra que comece com os caracteres "San".
Localiza qualquer arquivo no qual o nome do arquivo contém uma palavra começando com micro, seguida por uma palavra começando com exe.

 

¹ Colchetes vazios ([]) indicam "sem valor".

Para propriedades de cadeia de caracteres, a operação padrão é COP_WORD_STARTS_WITH ou COP_WORD_EQUAL.

Valores de consulta

Exemplos úteis de como os valores de consulta podem ser restritos estão listados na tabela a seguir.

Valor/símbolo Exemplos Descrição
cadeia de caracteres Automático
Qualquer sequência de caracteres que possa ser pesquisada. A cadeia de caracteres não deve conter espaços em branco ou combinações de caracteres que façam parte da sintaxe. Este exemplo procura uma palavra que começa com auto .
String entre aspas "" "Conclusões: válidas" "A equipa "azul""
Qualquer sequência de caracteres. A cadeia de caracteres não é interpretada como parte da sintaxe.
As aspas podem ser incluídas numa consulta se forem duplicadas. Este exemplo procura A equipe "azul".
Inteiro 5678
Use apenas dígitos para números inteiros. Não utilize separadores para milhares.
Número de ponto flutuante 5678.1234
Como os formatos de ponto flutuante variam entre localidades, uma consulta canônica não pode usar uma constante de ponto flutuante. O uso de sintaxe canônica com números de ponto flutuante não é seguro para localização.
Boolean verdadeiro/falso System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#Falso
O VERDADEIRO valor booleano.
O valor booleano FALSE.
[] System.Keywords:=[]
Colchetes vazios indicam que não há valor. Este exemplo localiza todos os itens que não foram marcados.
Datas absolutas System.ItemData:26/01/2010
SystemDateModified 15/10/2002 19:00
Localiza itens com data de 26 de janeiro de 2010.
Localiza itens que foram modificados em 15 de outubro de 2002 entre as 19:00:00 e 19:00:59.

Nota:
Como os formatos de data (como formatos de ponto flutuante) variam entre localidades, o uso de sintaxe canônica com datas absolutas não é suportado e não é seguro para localização.


Datas relativas System.ItemDate:System.StructuredQueryType.DateTime#Hoje
System.DateAcquired:System.StructuredQueryType.DateTime#PróximoMês
System.Message.DateReceived:System.StructuredQueryType.DateTime#LastYear
Encontra itens com a data de hoje.
Localiza itens com uma data no mês seguinte.
Localiza itens com uma data no último ano.

Nota:
Além de pesquisar em datas e intervalos de datas específicos, o AQS reconhece valores de data relativos (como de hoje, de amanhã, da próxima semana, do próximo mês) e dia (como terça-feira ou segunda-feira. Quarta-feira) e mês (fevereiro).


.. System.ItemDate: 11/05/04..11/10/04 System.Size: 5KB..10KB
Períodos duplos indicam um intervalo de valores. Encontra itens com data entre 11/05/04 e 11/10/04, inclusive.
Localiza itens entre 5 e 10kb de tamanho.

 

Restrições de âmbito

Os usuários podem limitar o escopo de suas pesquisas a locais de pastas ou armazenamentos de dados específicos. Por exemplo, se utilizar várias contas de correio eletrónico e pretender limitar uma consulta ao Microsoft Outlook ou ao Microsoft Outlook Express, pode utilizar System.Search.Store:mapi ou System.Search.Store:oe respetivamente. A tabela a seguir mostra alguns exemplos de como restringir uma pesquisa por armazenamento de dados.

Restringir a pesquisa por armazenamento de dados Palavra-chave Exemplo
Ficheiros arquivo System.Search.Store:arquivo
Perspetivas MAPI System.Search.Store:mapi
Outlook Express oe System.Search.Store:oe
Arquivos offline CSC System.Search.Store:csc
Pasta específica na unidade local pasta System.ItemFolderNameDisplay:C:"\MyFolder"

 

Recursos adicionais

  • No Windows 7 e posterior, uma opção de menu de atalho pode estar disponível com base em se uma condição AQS é atendida. Para obter mais informações, consulte "Obtendo comportamento dinâmico para verbos estáticos usando sintaxe de consulta avançada" em Criando manipuladores de menu de contexto.
  • As consultas AQS podem ser limitadas a tipos específicos de arquivos, que são conhecidos como tipos de arquivo. Para obter mais informações, consulte tipos de arquivo e associações. Para obter documentação de referência de propriedade, consulte System.Kinde System.KindText.

Consultando o índice programaticamente

Usando abordagens SQL e AQS para consultar o índice

Consultando o índice com ISearchQueryHelper

Consultando o índice com o protocolo search-ms

Consultando o índice com a sintaxe SQL do Windows Search