Использование параметра запроса $search

В дополнение к другим параметрам запросов OData Microsoft Graph поддерживает параметр запроса $search для ограничения результатов запроса с помощью условия поиска.

Поддержка $search параметра запроса зависит от сущности, при этом некоторые из них, например Microsoft Entra ресурсы, производные от directoryObject, поддерживаются $search только в расширенных запросах.

Примечание.

В настоящее время параметр запроса $search недоступен в клиентах Azure AD B2C.

Существует известная проблема, связанная с кодировкой символов амперсанда (&) в $search выражениях в конечной точке v1.0 . Дополнительные сведения о проблеме и рекомендуемое решение см. в статье Известная проблема: $search для объектов каталога завершается сбоем для символа закодированного амперсанда (&).

Использование параметра $search в коллекциях message

Вы можете искать сообщения на основе значения в определенных свойствах сообщения. Результаты поиска сортируются по дате и времени отправки сообщения. Запрос $search возвращает до 1000 результатов.

Если при поиске сообщений указано только значение, а конкретные свойства не заданы, поиск выполняется по свойствам поиска по умолчанию: from, subject и body.

Следующий пример кода возвращает все сообщения из папки "Входящие" вошедшего пользователя, содержащие слово "pizza" в любом из трех свойств поиска по умолчанию:

GET https://graph.microsoft.com/v1.0/me/messages?$search="pizza"

Кроме того, для поиска сообщений можно указать в таблице ниже их имена свойств, распознаваемые синтаксисом языка запросов по ключевым словам (KQL). Эти имена свойств соответствуют свойствам, определенным в сущности message в Microsoft Graph. Синтаксис KQL поддерживается в Outlook и других приложениях Microsoft 365, например SharePoint. Благодаря этому возможно использование общего домена обнаружения для соответствующих хранилищ данных.

Свойство электронных писем, по которому можно выполнять поиск Описание Пример
attachment Имена файлов, вложенных в сообщение электронной почты. GET../me/messages?$search="attachment:api-catalog.md"
bcc Поле Скрытая копия в сообщении электронной почты, где указан SMTP-адрес, отображаемое имя или псевдоним. GET../me/messages?$search="bcc:samanthab@contoso.com"&$select=subject,bccRecipients
body Текст сообщения электронной почты. GET../me/messages?$search="body:excitement"
cc Поле Копия в сообщении электронной почты, где указан SMTP-адрес, отображаемое имя или псевдоним. GET../me/messages?$search="cc:danas"&$select=subject,ccRecipients
from Отправитель сообщения электронной почты, на которого указывает SMTP-адрес, отображаемое имя или псевдоним. GET../me/messages?$search="from:randiw"&$select=subject,from
hasAttachment Значение TRUE означает, что сообщение электронной почты содержит вложение, не являющееся встроенным. В противном случае задается значение FALSE. GET../me/messages?$search="hasAttachments:true"
importance Важность сообщения, которую отправитель может указать при отправке. Возможные значения — low, medium и high. GET../me/messages?$search="importance:high"&$select=subject,importance
kind Тип сообщения. Допустимые значения — contacts, docs, email, faxes, im, journals, meetings, notes, posts, rssfeeds, tasks и voicemail. GET../me/messages?$search="kind:voicemail"
participants Такие поля сообщения электронной почты, как От, Кому, Копия и Скрытая копия, где указан SMTP-адрес, отображаемое имя или псевдоним. GET../me/messages?$search="participants:danas"
received Дата получения сообщения адресатом. GET../me/messages?$search="received:07/23/2018"&$select=subject,receivedDateTime
recipients Такие поля сообщения электронной почты, как Кому, Копия и Скрытая копия, где указан SMTP-адрес, отображаемое имя или псевдоним. GET../me/messages?$search="recipients:randiq"&$select=subject,toRecipients,ccRecipients,bccRecipients
sent Дата отправки сообщения отправителем. GET../me/messages?$search="sent:07/23/2018"&$select=subject,sentDateTime
size Размер элемента в байтах. GET../me/messages?$search="size:1..500000"
subject Текст в строке темы сообщения электронной почты. . GET../me/messages?$search="subject:has"&$select=subject
to Поле Кому в сообщении электронной почты, где указан SMTP-адрес, отображаемое имя или псевдоним. GET.../me/messages?$search="to:randiw"&$select=subject,toRecipients

Дополнительные сведения о доступных для поиска свойствах, синтаксисе KQL, поддерживаемых операторах и подсказках для поиска вы найдете в таких статьях:

Использование параметра $search в коллекциях person

API People Microsoft Graph можно использовать для получения сведений о наиболее релевантных для пользователя людях. Релевантность определяется шаблонами взаимодействия и совместной работы пользователя, а также бизнес-отношениями. API People поддерживает параметр запроса $search. Запрос $search возвращает до 250 результатов.

Поиск людей выполняется по свойствам displayName и emailAddress ресурса person.

По приведенному ниже запросу выполняется поиск человека с именем Irene McGowen в свойствах displayName и emailAddress всех людей из коллекции people вошедшего пользователя. Так как человек с именем Irene McGowan является релевантным для вошедшего пользователя, возвращается информация о нем.

GET https://graph.microsoft.com/v1.0/me/people/?$search="Irene McGowen"

Ниже показан пример ответа.

HTTP/1.1 200 OK
Content-type: application/json
{
    "value": [
       {
           "id": "C0BD1BA1-A84E-4796-9C65-F8A0293741D1",
           "displayName": "Irene McGowan",
           "givenName": "Irene",
           "surname": "McGowan",
           "birthday": "",
           "personNotes": "",
           "isFavorite": false,
           "jobTitle": "Auditor",
           "companyName": null,
           "yomiCompany": "",
           "department": "Finance",
           "officeLocation": "12/1110",
           "profession": "",
           "userPrincipalName": "irenem@contoso.com",
           "imAddress": "sip:irenem@contoso.com",
           "scoredEmailAddresses": [
               {
                   "address": "irenem@contoso.com",
                   "relevanceScore": -16.446060612802224
               }
           ],
           "phones": [
               {
                   "type": "Business",
                   "number": "+1 412 555 0109"
               }
           ],
           "postalAddresses": [],
           "websites": [],
           "personType": {
               "class": "Person",
               "subclass": "OrganizationUser"
           }
       }
   ]
}

Дополнительные сведения об API People см. в этой статье.

Использование $search в коллекциях объектов каталога

Примечание.

Существует известная проблема , связанная с $search объектами каталога для значений, содержащих символ амперсанда (&).

Microsoft Entra ID ресурсы и их связи, производные от directoryObject, поддерживают $search параметр запроса только в расширенных запросах. Реализация поиска не поддерживает логику contains. Вместо этого используется метод разметки, который извлекает слова из значения свойства и строки поиска с использованием пробелов, чисел, разного регистра и символов, как показано в следующих примерах.

  • Пробелы: hello world =>hello, world
  • Разные регистры1⁾: HelloWorld или helloWORLD =>hello, world
  • Symbols2⁾: hello.world =>hello, ., world, helloworld
  • Числа: hello123world =>hello, 123, world

1⁾ В настоящее время маркеризация работает только в том случае, если регистр изменяется со строчных регистров на верхний регистр, поэтому HELLOworld считается одним маркером: helloworld, и HelloWORld представляет собой два маркера: hello, world. Логика токенизации ⁽2⁾ также объединяет слова, разделенные только символами; например, при поиске helloworld будет находиться hello-world и hello.world.

Примечание.

  • После токенизации токены сопоставляются независимо от исходного регистра и сопоставляются в любом порядке. Например, displayName 李四(David Li) соответствует строкам поиска, таким как 李四(David Li), 李四, David, Li, David), (李四. Li 李
  • Изменение алфавита, например с латинской на кириллицу или китайский, не создает новый маркер. Например, displayName 蓝色group соответствует строкам 蓝色group поиска и 蓝色 , но не group; в то время как displayName group蓝色 соответствует строкам group蓝色 поиска и group , но не 蓝色 или .
  • Поддержка поиска с разметкой работает только в полях displayName и description. Любое поле типа String может быть помещено в $search; поля, отличные от displayName и description по умолчанию для $filterstartswith поведения. Например:
GET https://graph.microsoft.com/v1.0/groups/?$search="displayName:OneVideo" OR "mail:onevideo"
ConsistencyLevel: eventual

Это запустит поиск всех групп с отображаемыми именами, имеющими токены one и video или почту, начинающуюся с onevideo.

$search можно использовать вместе с $filter:

GET https://graph.microsoft.com/v1.0/groups/?$filter=mailEnabled eq true&$search="displayName:OneVideo"
ConsistencyLevel: eventual

В результате будут выводиться все группы с включенной поддержкой почты с именами типа "OneVideo". Результаты ограничены на основе логического соединения $filter ("И") и всего запроса в $search.

В синтаксисе поиска применяются следующие правила:

  • Универсальный формат: $search="clause1" [AND | OR] "[clauseX]".
  • Поддерживается любое количество предложений. Также поддерживаются круглые скобки для приоритета.
  • Синтаксис для каждого предложения: "<property>:<text to search>".
  • Имя свойства должно быть указано в предложении. Любое свойство, которое можно использовать в $filter, можно также использовать в $search. В зависимости от свойства действием поиска является search или startsWith, если поиск не поддерживается в свойстве.
  • Все предложение должно объявляться в двойных кавычках. Если оно содержит двойные кавычки или обратную косую черту, его необходимо экранировать с помощью обратной косой черты. Все другие специальные символы должны быть закодированы в URL-адресе.
  • Логические операторы AND и OR должны размещаться за пределами двойных кавычек и вводиться прописными буквами.

В таблице ниже приведено несколько примеров.

Класс объекта Описание Пример
Пользователь Отображаемое имя пользователя из адресной книги. GET../users?$search="displayName:Guthr"
Пользователь Отображаемое имя пользователя или электронная почта из адресной книги. GET../users?$search="displayName:Guthr" OR "mail:Guthr"
Группа Отображаемое имя пользователя или описание из адресной книги. GET../groups?$search="description:One" AND ("displayName:Video" OR "displayName:Drive"
Группа Отображаемое имя адресной книги в группе с поддержкой почты. GET../groups?$filter=mailEnabled eq true&$search="displayName:OneVideo"

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