Поделиться через


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

Расширенный синтаксис запросов (AQS) — это синтаксис запросов по умолчанию, используемый поиском Windows для запроса индекса и уточнения и узких параметров поиска. 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, которые должны находиться во всех верхних регистрах.

 

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

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

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

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

Свойство определяется ключевым словом, таким как автор или размер, или каноническим именем свойства, например 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 выбирает наиболее подходящий оператор для запроса:

  • Для строкового свойства предполагается оператор 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

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

  • "последний квартал"
  • автор:(Терса ИЛИ ли)
  • folder:MyDocs

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

System.Size:>1kb

Свойства

Свойства ссылаются на ключевое слово, которое может быть каноническим именем свойства в Windows 7 и более поздних версиях. AQS в пользовательском интерфейсе Windows может использовать метку вместо канонического имени свойства, например автора вместо 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: ГГГГ-ММ DDThh:mm-:ss

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

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

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

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

В Windows 7 и более поздних версиях ключевые слова mnemonic работают только на системном языке, такие как немецкие ключевые слова только в немецкой операционной системе, а также ключевые слова английского языка только в английской операционной системе. System.Author — это каноническое ключевое слово, а для свойства System.Author используется mnemonic, например Author. Введение канонических ключевых слов компенсирует тот факт, что английские mnemonic ключевые слова больше не являются универсальными распознаваемыми во всех операционных системах независимо от языка, как и в 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 Свойство приоритета может иметь числовый диапазон значений:
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. Некоторые операторы имеют взаимозаменяемые символы.

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

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

System.Size:>=1 кб
Это значение равно или больше 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"
Находит файлы, в которых имя файла начинается с микрофона, за которым следует некоторый символ, а затем osoft w, за которым следует все символы, заканчивающиеся d.
Знак вопроса и * символы не интерпретируются буквально и работают, как подстановочные знаки в стиле DOS:
  • ? соответствует одному произвольному символу.
  • * соответствует нулю или более произвольным символам.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Для Windows 7 и более поздних версий. Находит фразу "Санджай Джейкобс" во всех свойствах From. За словом Санджай должно следовать слово Джейкобс.
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Для Windows 7 и более поздних версий. Находит любой элемент, в котором автор содержит слово, начиная с символов "San".
Находит любой файл, в котором имя файла содержит слово, начиная с микро, за которым следует слово, начиная с exe.

 

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

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

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

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

Значение или символ Примеры Description
Строка авто
Любая последовательность символов, которые можно искать. Строка не должна содержать пробелы или сочетания символов, которые являются частью синтаксиса. В этом примере выполняется поиск слова, начинающийся с автозапуска.
В кавычках строка "" "Выводы: допустимый" "Команда ""синий""
Любая последовательность символов. Строка не интерпретируется как часть синтаксиса.
Кавычки можно включить в запрос, если они двойны. В этом примере выполняется поиск команды blue.
Целое 5678
Используйте только цифры для целых чисел. Не используйте разделители для тысяч.
Число с плавающей запятой 5678.1234
Так как форматы с плавающей запятой зависят от языковых стандартов, канонический запрос не может использовать константу с плавающей запятой. Использование канонического синтаксиса с числами с плавающей запятой не является безопасным для локализации.
Логическое значение true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
Логическое значение TRUE.
Логическое значение FALSE.
[] System.Keywords:=[]
Пустые квадратные скобки указывают на отсутствие значения. В этом примере обнаруживаются все элементы, которые не были помечены.
Абсолютные даты System.ItemDate:1/26/2010
SystemDateModified 10/15/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 КБ
Двойные периоды указывают диапазон значений. Находит элементы с датой от 11.05.04 до 11.10.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
Определенная папка на локальном диске папку System.ItemFolderNameDisplay:C:"\MyFolder"

 

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

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

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

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

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

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

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