Использование API поиска в модели надстройки SharePoint
Подход, который вы используете для выполнения поиска в службе поиска SharePoint, отличается в новой модели надстройки SharePoint, чем в коде полного доверия. В типичном сценарии с кодом полного доверия (FTC) или решением фермы серверная объектная модель SharePoint (переопределения веб-части "Содержимое по запросу") или веб-службы поиска использовались для выполнения поиска в службе поиска SharePoint.
В сценарии модели надстройки SharePoint поиск выполняется с помощью службы поиска SharePoint с помощью CSOM или REST API.
Руководящие принципы высокого уровня
Как правило, мы хотели бы предоставить следующие высокоуровневые рекомендации по созданию и настройке семейств веб-сайтов и дочерних сайтов, а затем развертывать артефакты, конфигурации и ресурсы фирменной символики для них.
- Использование проверки подлинности AppOnly не поддерживается ни для каких операций службы поиска.
- Это связано с тем, что служба поиска обращается к службе профилей пользователей для поиска сведений профиля пользователя, а UPS не поддерживает проверку подлинности AppOnly.
- Таким образом, так как релевантность поиска и другие аспекты поиска зависят от конкретного пользователя и атрибутов его профиля, шаблон проверки подлинности AppOnly не будет работать.
Параметры для выполнения поисковых запросов с помощью службы поиска SharePoint
У вас есть несколько вариантов для выполнения поиска с помощью службы поиска SharePoint.
- API CSOM для .NET
- JavaScript CSOM (JSOM) API
- REST API
API CSOM для .NET
В этом варианте для выполнения поиска в службе поиска SharePoint используется API CSOM .Net.
- Этот API доступен только в управляемом коде .NET.
Для каких случаев он подходит?
- Этот API отлично подходит для надстроек, размещенных у поставщика, длительных операций или других сценариев на стороне сервера, которые выполняются на платформе .NET.
- Некоторые примеры таких сценариев — ASP.NET веб-сайты MVC, службы веб-API ASP.NET, консоль .NET или приложения Windows, а также веб-задания Azure.
Приступая к работе
В следующем примере показано, как выполнять поиск с помощью службы поиска SharePoint с помощью API CSOM для .Net. В этом примере также показано, как получить доступ к профилю пользователя для персонализации результатов поиска.
В статье Как выполнять персонализированные поисковые запросы с помощью CSOM (видео O365 PnP) описано, как выполнить персонализированные поисковые запросы(пример O365 PnP).
Метод btnPerformSearch_Click в классе Default.aspx.cs выполняет поиск текстового значения, введенного пользователем в поле поиска, и ограничивает поиск всем содержимым, хранящимся в семействе веб-сайтов. Параметр contentclass:"STS_Site" ограничивает область поиска семействами веб-сайтов.
protected void btnPerformSearch_Click(object sender, EventArgs e)
{
var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
using (var clientContext = spContext.CreateUserClientContextForSPHost())
{
// Since in this case we want only site collections, let's filter based on result type
string query = searchtext.Text + " contentclass:\"STS_Site\"";
ClientResult<ResultTableCollection> results = ProcessQuery(clientContext, query);
lblStatus1.Text = FormatResults(results);
}
}
Метод btnPersonalizedSearch_Click в классе Default.aspx.cs выполняет тот же поиск, что и метод btnPerformSearch_Click, а также добавляет дополнительный параметр на основе профиля текущего пользователя. Класс PeopleManager используется для доступа к свойствам профиля текущего пользователя.
protected void btnPersonalizedSearch_Click(object sender, EventArgs e)
{
var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
using (var clientContext = spContext.CreateUserClientContextForSPHost())
{
// Load user profile properties
PeopleManager peopleManager = new PeopleManager(clientContext);
PersonProperties personProperties = peopleManager.GetMyProperties();
clientContext.Load(personProperties);
clientContext.ExecuteQuery();
// Check teh value for About Me to investigate current values
string aboutMeValue = personProperties.UserProfileProperties["AboutMe"];
string templateFilter = ResolveAdditionalFilter(aboutMeValue);
// Let's build the query
string query = "contentclass:\"STS_Site\" " + templateFilter;
ClientResult<ResultTableCollection> results = ProcessQuery(clientContext, query);
lblStatus2.Text = FormatResults(results);
}
}
Метод ResolveAdditionalFilter в классе Default.aspx.cs оценивает свойства профиля текущего пользователя и возвращает применимый параметр поиска. В этом примере, если свойство профиля пользователя aboutMeValue содержит AppTest, возвращается параметр поиска WebTemplate=STS. Этот параметр ограничивает область поиска сайтами, созданными с помощью шаблона STS (сайт группы).
private string ResolveAdditionalFilter(string aboutMeValue)
{
if (!aboutMeValue.Contains("AppTest"))
{
return "WebTemplate=STS";
}
return "";
}
В обоих случаях метод ProcessQuery в классе Default.aspx.cs использует класс SearchExecutor для выполнения поискового запроса и возврата результатов.
private ClientResult<ResultTableCollection> ProcessQuery(ClientContext ctx, string keywordQueryValue)
{
KeywordQuery keywordQuery = new KeywordQuery(ctx);
keywordQuery.QueryText = keywordQueryValue;
keywordQuery.RowLimit = 500;
keywordQuery.StartRow = 0;
keywordQuery.SelectProperties.Add("Title");
keywordQuery.SelectProperties.Add("SPSiteUrl");
keywordQuery.SelectProperties.Add("Description");
keywordQuery.SelectProperties.Add("WebTemplate");
keywordQuery.SortList.Add("SPSiteUrl", Microsoft.SharePoint.Client.Search.Query.SortDirection.Ascending);
SearchExecutor searchExec = new SearchExecutor(ctx);
ClientResult<ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery);
ctx.ExecuteQuery();
return results;
}
JavaScript CSOM (JSOM) API
В этом варианте вы используете API JAVAScript CSOM (JSOM) для выполнения поиска в службе поиска SharePoint.
- Этот API доступен только в клиентском коде JavaScript.
Для каких случаев он подходит?
- Этот API отлично подходит для надстроек, размещенных в SharePoint, и надстроек, размещенных у поставщика, работающих на любой веб-платформе.
- Примерами таких сценариев являются ASP.NET веб-сайты MVC, веб-сайты PHP, веб-сайты Python и т. д.
Начало работы
В следующем примере кода показано, как выполнять поиск с помощью службы поиска SharePoint с помощью API JAVAScript CSOM (JSOM). В этом примере выполняется поиск всех элементов, содержащих термин "Blizzard".
var context = SP.ClientContext.get_current();
var keywordQuery =
new Microsoft.SharePoint.Client.Search.Query.KeywordQuery(context);
keywordQuery.set_queryText("Blizzard");
var searchExecutor =
new Microsoft.SharePoint.Client.Search.Query.SearchExecutor(context);
results = searchExecutor.executeQuery(keywordQuery);
context.executeQueryAsync(onGetEventsSuccess, onGetEventsFail);
API REST
В этом варианте вы используете REST API для выполнения поиска в службе поиска SharePoint.
- Этот API является наиболее гибким, так как он доступен как в коде на стороне сервера, так и на стороне клиента.
- Корневая конечная точка REST API службы поиска SharePoint:
- <https:// tenant>/site/_api/search/query
- Вот несколько простых примеров:
Поиск по ключевым словам
https://tenant/site/_api/search/query?querytext='{Apples}'
Выбор определенных свойств
https://tenant/site/_api/search/query?querytext='test'&selectproperties='Rank, Title'
сортировке;
https://tenant/site/_api/search/query?querytext='Oranges'&sortlist='LastModifiedTime:ascending'
Для каких случаев он подходит?
Этот API отлично подходит для надстроек, размещенных в SharePoint, и надстроек, размещенных у поставщика, работающих на любой веб-платформе.
- Некоторые примеры таких сценариев— ASP.NET веб-сайты MVC, веб-сайты PHP, веб-сайты Python, службы веб-API ASP.NET, консоль .NET или приложения Windows, веб-задания Azure и т. д.
Начало работы
Параметр на стороне сервера
В следующем примере показано, как выполнять поиск в службе поиска SharePoint с помощью REST API из управляемого кода .NET.
EmployeeDirectory (учебные материалы по OfficeDev)
Метод Index в классе HomeController.cs выполняет поиск всех пользователей, фамилия которых начинается с текстового значения, которое щелкает пользователь.
var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext); string accessToken = spContext.UserAccessTokenForSPHost; //Build the REST API request StringBuilder requestUri = new StringBuilder() .Append(spContext.SPHostUrl) .Append("/_api/search/query?querytext='LastName:") .Append(startLetter) .Append("*'&selectproperties='LastName,FirstName,WorkEmail,WorkPhone'&sourceid='B09A7990-05EA-4AF9-81EF-EDFAB16C4E31'&sortlist='FirstName:ascending'"); //Create HTTP Client HttpClient client = new HttpClient(); //Add the REST API request HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUri.ToString()); //Set accept header request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); //Set Bearer header equal to access token request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); //Send the REST API request HttpResponseMessage response = await client.SendAsync(request); //Set the response string responseString = await response.Content.ReadAsStringAsync();
В статье Создание надстроек SharePoint с использованием поиска (видео O365 PnP) описывается руководство по EmployeeDirectory (учебные материалы по OfficeDev).
Параметр на стороне клиента
В следующем примере кода показано, как выполнять поиск в службе поиска SharePoint с помощью REST API из JavaScript. В этом примере выполняется поиск всех элементов, содержащих термин "Lacrosse".
$.ajax({
url: "http://site/_api/search/" +
"query?querytext='{Lacrosse}‘",
method: "GET",
headers: {
"accept": "application/json;odata=verbose",
},
success: onSuccess,
error: onError
});
См. также
- Как выполнять персонализированные поисковые запросы с помощью CSOM (видео O365 PnP)
- EmployeeDirectory (учебные материалы по OfficeDev)
- Создание надстроек SharePoint, использующих поиск (видео O365 PnP)
- Статьи руководства на https://aka.ms/OfficeDevPnPGuidance
- Ссылки в MSDN на https://aka.ms/OfficeDevPnPMSDN
- Видео на https://aka.ms/OfficeDevPnPVideos
Образцы PnP
- Search.PersonalizedResults (пример O365 PnP)
- Примеры и содержимое в Microsoft 365 Patterns and Practices (PnP)
Область применения
- Office 365 Multi Tenant (MT)
- Office 365 Dedicated (D)
- Локальное развертывание SharePoint 2013