Использование расширенного синтаксиса запросов программным способом

Расширенный синтаксис запросов (AQS) — это синтаксис запросов по умолчанию, используемый Windows Search для запроса индекса, а также для уточнения и сужения параметров поиска. AQS используется разработчиками для программного создания запросов (и пользователями для сужения параметров поиска). Каноническая служба AQS появилась в Windows 7 и должна использоваться в Windows 7 и более поздних версиях для программного создания запросов AQS.

Этот раздел организован следующим образом:

Дополнительные сведения о синтаксисе запросов

Запрос состоит из базовых запросов, связанных с AND, OR и NOT, как показано в следующем примере синтаксиса:

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

Примечание

AQS не учитывает регистр, за исключением and, OR и NOT, которые должны быть в верхнем регистре.

 

Если запрос использует два или более использования И или ИЛИ, они привязываются слева направо, независимо от того, является ли это И или ИЛИ. То есть запрос "apple AND pear OR plum" будет интерпретирован так, как если бы он был написан как "(яблоко И груша) ИЛИ сливы", а запрос", "яблоко ИЛИ груша И сливы", будет интерпретироваться так, как если бы он был написан как "(яблоко ИЛИ груша) И сливы". Таким образом, если документ содержит слово сливы, но не содержит ни яблоко, ни грушу, первый запрос вернет его, а второй — нет. Поэтому мы рекомендуем использовать явные круглые скобки для любого запроса, который смешивает AND и OR, чтобы избежать ошибок или неправильной интерпретации.

Базовый запрос ищет элементы, удовлетворяющие ограничению свойства. Единственной обязательной частью базового запроса является ограничение или значение поиска. Если свойство не указано, Поиск Windows выполняет поиск по всем свойствам. <restr> представляет ограничение поиска.

Допустимы следующие формы для базового запроса:

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

Свойство обозначается ключевое слово, например author или size, или каноническим именем свойства, например System.DateModified. Допустимые формы для свойства:

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

Оператор указывает на операцию, < например или =. Список допустимых операторов см. в разделе Операторы запросов далее в этом разделе.

Базовое ограничение — это простое ограничение для свойства, которое может быть записано без скобок:

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

Ограничение — это значение поиска, например числовое или строковое значение, при необходимости с помощью оператора . Допустимые формы для ограничения:

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

Если не указать оператор, Windows Search выберет наиболее подходящий оператор для запроса:

  • Для строкового свойства предполагается оператор COP_WORD_STARTSWITH $< .
  • Для всех остальных свойств предполагается оператор COP_EQUAL = .

Для программного использования AQS рекомендуется всегда иметь явный оператор . Допустимая форма для поиска простого значения или диапазона значений выглядит следующим образом:

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

Простое значение может состоять из следующих типов:

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

Примеры

Запрос, который выполняет поиск документа, содержащего этап "Последний квартал", созданный Тетерой или Ли и сохраненный в папке MyDocs, объединяет три основных запроса следующим образом:

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

Ниже приведены три основных запроса:

  • "Последний квартал"
  • author:(Theresa OR Lee)
  • folder:MyDocs

Базовый запрос, использующий канонический синтаксис:

System.Size:>1kb

Свойства

На свойства ссылается ключевое слово, который может быть каноническим именем свойства в Windows 7 и более поздних версиях. AQS в пользовательском интерфейсе Windows может использовать метку вместо канонического имени свойства, например author вместо System.Author. В Windows Vista и более ранних версиях можно было использовать английские метки независимо от языка пользовательского интерфейса. В Windows 7 и более поздних версиях Поиск Windows распознает ключевые слова только в текущем языке пользовательского интерфейса по умолчанию.

Поддержка пользовательских свойств

В Windows Vista и более ранних версиях настраиваемые свойства не были доступны в AQS. В Windows 7 и более поздних версиях AQS работает с пользовательскими свойствами, зарегистрированными в системе свойств. Дополнительные сведения о создании настраиваемых свойств см. в разделе Система свойств.

Свойства DateTime в Windows 8

В Windows 8 свойства DateTime (например , System.DateModified) поддерживают канонический формат даты и времени, заданный стандартом ISO-8601, при необходимости включая часовой пояс UTC.

  • Windows 8 и более ранние версии, дата и время без часового пояса UTC:ГГГГ-ММ-ДДЧч:мм:сс

    В этом формате указывается местное время независимо от языкового стандарта пользователя или системы.

  • Windows 8, дата и время с часовой поясом UTC:ГГГГ-ММ-ДДЧч:мм:ssTZD

    Этот формат указывает время в указанном часовом поясе UTC.

Использование ключевых слов в локальных языках

В Windows 7 и более поздних версиях мнемонические ключевые слова работают только на системном языке, например немецкие ключевые слова только в немецкой операционной системе и английские ключевые слова только в английской операционной системе. System.Author является каноническим ключевое слово, а например, для свойства System.Author используется мнемоническое значение Author. Введение канонических ключевых слов компенсирует тот факт, что английские мнемонические ключевые слова больше не являются общепризнанными во всех операционных системах независимо от языка, как это было в Windows Vista и ранее.

Примечание

В Windows 7 и более поздних версиях Поиск Windows распознает ключевые слова только на текущем языке по умолчанию, а не на английском языке, если английский язык не используется по умолчанию. Мы рекомендуем разработчикам всегда использовать канонический синтаксис, чтобы в их приложении не было языковых проблем с ключевыми словами.

 

Канонический расширенный синтаксис запросов в Windows 7

Канонический синтаксис был введен для ключевых слов в Windows 7. Пример запроса с каноническим свойством : System.Message.FromAddress:=me@microsoft.com. При написании запросов в приложениях под управлением Windows 7 и более поздних версий необходимо использовать канонический синтаксис для программного создания запросов AQS. Если вы не используете канонический синтаксис и приложение развернуто на языке языкового стандарта или пользовательского интерфейса, отличном от языка в коде приложения, ваши запросы будут интерпретироваться неправильно.

Ниже приведены соглашения для канонического синтаксиса ключевое слово.

  • Каноническим синтаксисом свойства является его каноническое имя, например System.Photo.LightSource. Канонические имена не чувствительны к регистру.
  • Канонический синтаксис логических операторов состоит из ключевых слов AND, OR и NOT во всех прописных буквах.
  • Операторы <, >, =и т. д. не локализованы и, таким образом, также являются частью канонического синтаксиса.
  • Если свойство P имеет перечисляемые значения или диапазоны с именами N₁ по Nk, канонический синтаксис для I-гозначения или диапазона является каноническим именем для P, за которым следует символ #, а затем NI, как показано в следующем примере:
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardAи т. д.
  • Для определенного семантического типа T со значениями или диапазонами с именем N₁ по Nk каноническим синтаксисом для I-гозначения или диапазона является каноническое имя T, за которым следует символ #, а затем NI, как показано в следующем примере:
    • System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
  • Для литеральных значений, таких как слова или фразы, канонический синтаксис совпадает с обычным синтаксисом. Примеры запросов с литеральными значениями в каноническом синтаксисе:
    • System.Author:sanjay
    • System.Keywords:"Animal"
    • System.FileCount:>100

Примечание

В Windows 7 и более поздних версиях нет канонического синтаксиса для чисел. Так как форматы с плавающей запятой зависят от языковых стандартов, использование канонического запроса, включающего константу с плавающей запятой, не поддерживается. Целочисленные константы, напротив, могут записываться только с помощью цифр (без разделителей для тысяч) и могут безопасно использоваться в канонических запросах в Windows 7 и более поздних версиях.

 

Примеры

В следующей таблице приведены некоторые примеры канонических свойств и синтаксис для их использования.

Тип канонического свойства Пример Синтаксис
Строковое значение System.Author
Строковое значение выполняется в свойстве author:
System.Author:Jacobs
Диапазон перечисления System.Priority Свойство priority может иметь числовой диапазон значений:
System.Priority:System.Priority#High
Логическое System.IsDeleted
Логические значения можно использовать с любым логическим свойством:
System.IsDeleted:System.StructuredQueryType.Boolean#TrueИ System.IsDeleted:System.StructuredQueryType.Boolean#False
числовые; System.Size
Невозможно написать канонический запрос, который включает константу с плавающей запятой, так как форматы с плавающей запятой зависят от языковых стандартов. Целые числа должны быть записаны без разделителей для тысяч. Пример:
System.Size:<12345

 

Дополнительные сведения о канонических свойствах и системе свойств в целом см. в разделе Системные свойства. Кроме того, можно обратиться к общедоступным файлам заголовков.

Операторы запроса

Если свойство p имеет несколько значений для некоторого элемента, запрос AQS для p:<restr> возвращает элемент, если <restr> имеет значение true по крайней мере для одного из значений. (<restr> представляет ограничение.)

Синтаксис, перечисленный в следующей таблице, состоит из оператора, символа оператора, примера и примера описания. Оператор и символ могут использоваться на любом языке и включаться в любой запрос. Не используйте операторы COP_IMPLICIT или COP_APPLICATION_SPECIFIC. Некоторые операторы имеют взаимозаменяемые символы.

Оператор Символ Пример Описание
COP_EQUAL =
System.FileExtension:=".txt"
Значением является строка ".txt".
COP_NOTEQUAL
-
<>
NOT
- -
System.Kind:≠picture
System.Photo.DateTaken:-[]¹
System.Kind:<>picture
System.Kind:NOT picture
System.Kind:- -picture
Свойство System.Kind не является рисунком.
Свойство System.Photo.DateTaken имеет значение .
Свойство System.Kind не является рисунком.
Свойство System.Kind не является рисунком.
Операторы Double NOT, примененные к одному и тому же свойству, не отменяют. Таким образом, System.Kind:- -picture эквивалентен System.Kind:-picture и System.Kind:NOT picture.
COP_LESSTHAN <
System.Size:<1kb
Это значение меньше 1 КБ.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
Это значение больше, чем сегодня.
COP_LESSTHANOREQUAL <=

System.Size:<=1kb
Это значение меньше или равно 1 КБ.
COP_GREATERTHANOREQUAL >=

System.Size:>=1kb
Это значение равно или больше 1 КБ.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ Primer"
Находит элементы, имя файла которых начинается с символов "C++ Primer".
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>non
Находит элементы, в которых значение свойства заканчивается символами, не равными.
COP_VALUE_CONTAINS ~=
~~
System.Subject.~=round
System.Search.Autosummary:~~round
Находит сообщение, которое содержит эту строку в теме и, например, будет соответствовать "ground rules".
Находит все элементы с автозаполнения, который содержит символы вокруг.
COP_VALUE_NOTCONTAINS ~!
System.Author:~!" sanjay"
Находит авторов, у которых нет последовательности символов sanjay.
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
Находит файлы, в которых имя файла начинается с Mic, за которым следует символ, за которым следует osoft w, а затем любые символы, заканчивающиеся на d.
Знак вопроса и * символы не интерпретируются буквально и работают как подстановочные знаки в стиле DOS:
  • ? соответствует одному произвольному символу.
  • * соответствует нулю или более произвольным символам.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Для Windows 7 и более поздних версий. Находит фразу "Sanjay Jacobs" во всех свойствах From. За словом Sanjay должно следовать слово Джейкобс.
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Для Windows 7 и более поздних версий. Находит любой элемент, в котором автор содержит слово, начинающийся с символов "San".
Находит любой файл, в котором имя файла содержит слово, начинающееся с micro, за которым следует слово, начинающееся с exe.

 

¹ Пустые квадратные скобки ([]) обозначают "нет значения".

Для строковых свойств по умолчанию используется операция COP_WORD_STARTS_WITH или COP_WORD_EQUAL.

Значения запроса

Полезные примеры ограничения значений запроса приведены в следующей таблице.

Значение или символ Примеры Описание
Строка авто
Любая последовательность символов, которую можно искать. Строка не должна содержать пробелы или сочетания символов, которые являются частью синтаксиса. В этом примере выполняется поиск слова, начинающийся с auto.
Строка в кавычках "" "Выводы: допустимы" "Команда "Синий""
Любая последовательность символов. Строка не интерпретируется как часть синтаксиса.
Кавычки можно включить в запрос, если они удвоятся. В этом примере выполняется поиск по запросу "синяя" команда.
Целое число 5678
Используйте только цифры для целых чисел. Не используйте разделители для тысяч.
Число с плавающей запятой 5678.1234
Так как форматы с плавающей запятой зависят от языковых стандартов, канонический запрос не может использовать константу с плавающей запятой. Использование канонического синтаксиса с числами с плавающей запятой небезопасно для локализации.
Логическое значение true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
Логическое значение TRUE .
Логическое значение FALSE .
[] System.Keywords:=[]
Пустые квадратные скобки указывают на отсутствие значения. В этом примере выполняется поиск всех элементов, которые не помечены тегами.
Абсолютные даты System.ItemDate:26.1/2010
SystemDateModified 15.10.2002 19:00
Находит элементы с датой 26 января 2010 г.
Находит элементы, которые были изменены 15 октября 2002 года в период с 19:00:00 до 19:00:59.

Примечание.
Так как форматы даты (например, форматы с плавающей запятой) различаются в зависимости от языковых стандартов, использование канонического синтаксиса с абсолютными датами не поддерживается и не является безопасным для локализации.


Относительные даты System.ItemDate:System.StructuredQueryType.DateTime#Today
System.DateAcquired:System.StructuredQueryType.DateTime#NextMonth
System.Message.DateReceived:System.StructuredQueryType.DateTime#LastYear
Находит элементы с текущей датой.
Находит элементы с датой следующего месяца.
Находит элементы с датой последнего года.

Примечание.
Помимо поиска по определенным датам и диапазонам дат, AQS распознает относительные значения даты (например, сегодня, завтра, следующая неделя, следующий месяц) и день (например , вторник или понедельник). Среда) и месяц (февраль).


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb.. 10 КБ
Двойные точки указывают диапазон значений. Находит элементы с датой от 05.11.04 до 10.11.04 включительно.
Находит элементы размером от 5 до 10 КБ.

 

Ограничения области

Пользователи могут ограничить область поиска определенными расположениями папок или хранилищами данных. Например, если вы используете несколько учетных записей электронной почты и хотите ограничить запрос Microsoft Outlook или Microsoft Outlook Express, можно использовать System.Search.Store:mapi или System.Search.Store:oe соответственно. В следующей таблице приведены некоторые примеры ограничения поиска по хранилищу данных.

Ограничение поиска по хранилищу данных Ключевое слово Пример
Файлы файл System.Search.Store:file
Outlook Mapi System.Search.Store:mapi
Outlook Express oe System.Search.Store:oe
автономные файлы; Csc System.Search.Store:csc
Определенная папка на локальном диске folder System.ItemFolderNameDisplay:C:"\MyFolder"

 

Дополнительные ресурсы

  • В Windows 7 и более поздних версиях параметр контекстного меню может быть доступен в зависимости от того, выполняется ли условие AQS. Дополнительные сведения см. в разделе "Получение динамического поведения для статических команд с помощью расширенного синтаксиса запросов" статьи Создание обработчиков контекстного меню.
  • Запросы AQS могут быть ограничены определенными типами файлов, которые называются типами файлов. Дополнительные сведения см. в разделе Типы файлов и связи. Справочную документацию по свойствам см. в разделах System.Kind и System.KindText.

Отправка программных запросов к индексу

Использование подходов SQL и AQS для запроса индекса

Запрос индекса с помощью ISearchQueryHelper

Запрос к индексу с помощью протокола search-ms

Запрос к индексу с помощью синтаксиса SQL Windows Search