В дополнение к другим параметрам запросов OData Microsoft Graph поддерживает параметр запроса $search для ограничения результатов запроса с помощью условия поиска.
Поддержка $search параметра запроса зависит от сущности, при этом некоторые из них, например Microsoft Entra ресурсы, производные от directoryObject, поддерживаются $search только в расширенных запросах.
Примечание.
В настоящее время параметр запроса $search недоступен в клиентах Azure AD B2C.
Использование параметра $search в коллекциях message
Вы можете искать сообщения на основе значения в определенных свойствах сообщения. Результаты поиска сортируются по дате и времени отправки сообщения. Запрос $search возвращает до 1000 результатов.
Если при поиске сообщений указано только значение, а конкретные свойства не заданы, поиск выполняется по свойствам поиска по умолчанию: from, subject и body.
Следующий пример кода возвращает все сообщения из папки "Входящие" вошедшего пользователя, содержащие слово "pizza" в любом из трех свойств поиска по умолчанию:
GET https://graph.microsoft.com/v1.0/me/messages?$search="pizza"
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Me.Messages.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Search = "\"pizza\"";
});
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
MessageCollectionResponse result = graphClient.me().messages().get(requestConfiguration -> {
requestConfiguration.queryParameters.search = "\"pizza\"";
});
Кроме того, для поиска сообщений можно указать в таблице ниже их имена свойств, распознаваемые синтаксисом языка запросов по ключевым словам (KQL). Эти имена свойств соответствуют свойствам, определенным в сущности message в Microsoft Graph. Синтаксис KQL поддерживается в Outlook и других приложениях Microsoft 365, например SharePoint. Благодаря этому возможно использование общего домена обнаружения для соответствующих хранилищ данных.
Свойство электронных писем, по которому можно выполнять поиск
Описание
Пример
attachment
Имена файлов, вложенных в сообщение электронной почты.
Дополнительные сведения о доступных для поиска свойствах, синтаксисе 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"
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Me.People.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Search = "\"Irene McGowen\"";
});
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
PersonCollectionResponse result = graphClient.me().people().get(requestConfiguration -> {
requestConfiguration.queryParameters.search = "\"Irene McGowen\"";
});
Дополнительные сведения об API People см. в этой статье.
Использование $search в коллекциях объектов каталога
Примечание.
Существует известная проблема , связанная с $search объектами каталога для значений, содержащих символ амперсанда (&).
Microsoft Entra ID ресурсы и их связи, производные от directoryObject, поддерживают $search параметр запроса только в расширенных запросах. Реализация поиска не поддерживает логику contains. Вместо этого используется метод разметки, который извлекает слова из значения свойства и строки поиска с использованием пробелов, чисел, разного регистра и символов, как показано в следующих примерах.
Пробелы: hello world =>hello, world
Разные регистры⁽1⁾: HelloWorld или helloWORLD =>hello, 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
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Groups.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Search = "\"displayName:OneVideo\" OR \"mail:onevideo\"";
requestConfiguration.Headers.Add("ConsistencyLevel", "eventual");
});
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
GroupCollectionResponse result = graphClient.groups().get(requestConfiguration -> {
requestConfiguration.queryParameters.search = "\"displayName:OneVideo\" OR \"mail:onevideo\"";
requestConfiguration.headers.add("ConsistencyLevel", "eventual");
});
GET https://graph.microsoft.com/v1.0/groups/?$filter=mailEnabled eq true&$search="displayName:OneVideo"
ConsistencyLevel: eventual
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Groups.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Filter = "mailEnabled eq true";
requestConfiguration.QueryParameters.Search = "\"displayName:OneVideo\"";
requestConfiguration.Headers.Add("ConsistencyLevel", "eventual");
});
// THE CLI IS IN PREVIEW. NON-PRODUCTION USE ONLY
mgc groups list --search ""displayName:OneVideo"" --filter "mailEnabled eq true" --consistency-level "eventual"
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
GroupCollectionResponse result = graphClient.groups().get(requestConfiguration -> {
requestConfiguration.queryParameters.filter = "mailEnabled eq true";
requestConfiguration.queryParameters.search = "\"displayName:OneVideo\"";
requestConfiguration.headers.add("ConsistencyLevel", "eventual");
});
В результате будут выводиться все группы с включенной поддержкой почты с именами типа "OneVideo".
Результаты ограничены на основе логического соединения $filter ("И") и всего запроса в $search.
В синтаксисе поиска применяются следующие правила:
Поддерживается любое количество предложений. Также поддерживаются круглые скобки для приоритета.
Синтаксис для каждого предложения: "<property>:<text to search>".
Имя свойства должно быть указано в предложении. Любое свойство, которое можно использовать в $filter, можно также использовать в $search. В зависимости от свойства действием поиска является search или startsWith, если поиск не поддерживается в свойстве.
Все предложение должно объявляться в двойных кавычках. Если оно содержит двойные кавычки или обратную косую черту, его необходимо экранировать с помощью обратной косой черты. Все другие специальные символы должны быть закодированы в URL-адресе.
Логические операторы AND и OR должны размещаться за пределами двойных кавычек и вводиться прописными буквами.
Строки ввода, указанные в $search, а также свойства для поиска, разделяются на части с помощью пробелов, различных регистров и типов символов (чисел и специальных символов).
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.