Utilisation de l’API de recherche dans le modèle SharePoint de recherche

L’approche que vous prenez pour exécuter des recherches avec le service de recherche SharePoint est différente dans le nouveau modèle de SharePoint par rapport au code de confiance totale. Dans un scénario classique de code de confiance totale /solution de batterie de serveurs, le modèle objet côté serveur SharePoint (remplacements de contenu par le contenu par le service Web de requête) ou les services Web de recherche étaient utilisés pour exécuter des recherches avec le service de recherche SharePoint.

Dans un SharePoint de modèle de SharePoint, vous exécutez des recherches via les API CSOM ou REST.

Conseils importants

En règle générale, nous voulons fournir les instructions de haut niveau suivantes pour créer et configurer des collections de sites et des sous-sites, puis déployer des artefacts, des configurations et des ressources de pertinence.

  • L’utilisation de l’authentification AppOnly n’est pas prise en charge pour les opérations du service de recherche.
    • Cela est dû au fait que le service de recherche accède au service de profil utilisateur pour rechercher des informations de profil utilisateur et que le service UPS ne prend pas en charge l’authentification AppOnly.
    • Par conséquent, étant donné que la pertinence de la recherche et d’autres facettes de recherche dépendent d’un utilisateur donné et de leurs attributs de profil, le modèle d’authentification AppOnly ne fonctionne pas.

Options d’exécution de recherches avec le service SharePoint search

Vous avez un coupe d’options pour exécuter des recherches avec SharePoint Service de recherche.

  • API CSOM .NET
  • JavaScript CSOM (JSOM) API
  • API REST

API CSOM .NET

Dans cette option, vous utilisez l’API CSOM .Net pour exécuter des recherches avec SharePoint Service de recherche.

  • Cette API est disponible uniquement dans le code .Net géré.

Quand est-elle adaptée ?

  • Cette API s’adapte parfaitement aux add-ins hébergés par un fournisseur, aux opérations de longue durée ou à d’autres scénarios côté serveur qui s’exécutent sur la plateforme .Net.
  • Voici quelques exemples de ces scénarios : ASP.NET sites web MVC, des services API Web ASP.NET, une console .Net ou des applications Windows et des travaux web Azure.

Prise en main

L’exemple suivant montre comment exécuter des recherches avec le service SharePoint search avec l’API CSOM .Net. Cet exemple montre également comment accéder au profil d’un utilisateur pour personnaliser les résultats de la recherche.

Api de recherche et page de personnalisation. Texte dans l’image : effectuer une recherche d’API de recherche. Fournissez un filtre de recherche pour la requête de recherche à l’échelle du client : la zone de texte contient le mot « Test ». Texte du bouton : effectuer une recherche simple. Effectuez une recherche personnalisée de tous les modèles de site à l’aide de données de profil. Si à propos de moi ne contient PAS de texte AppTest, nous ne rechercher que les sites qui sont des sites d’équipe (WebTemplate = STS). Si AppTest est présent, nous faisons une recherche sur tous les sites. Scénario : afficher des sites ou des données agrégées à partir d’emplacements spécifiques en fonction du profil utilisateur. Par exemple, vous pouvez agréger les pages d’actualités qui sont uniquement marquées avec l’identificateur correspondant à la ville ou à l’emplacement actuel de l’utilisateur. Texte du bouton : effectuer une recherche personnalisée.

La manière d’effectuer des requêtes de recherche personnalisées avec CSOM (O365 PnP Video) vous permet de passer par le search.personalizedResults (exemple PnP O365).

La méthode btnPerformSearch_Click de la classe Default.aspx.cs exécute une recherche pour la valeur de texte que l’utilisateur entre dans la zone de recherche et la limite à tout le contenu stocké dans une collection de sites. Le paramètre contentclass:"STS_Site » limite l’étendue de recherche aux collections de sites.

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);
    }
}

La méthode btnPersonalizedSearch_Click dans la classe Default.aspx.cs exécute la même recherche que la méthode btnPerformSearch_Click et ajoute également un paramètre supplémentaire basé sur le profil de l’utilisateur actuel. La classe PeopleManager est utilisée pour accéder aux propriétés de profil de l’utilisateur actuel.

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);
    }
}

La méthode ResolveAdditionalFilter de la classe Default.aspx.cs évalue les propriétés de profil de l’utilisateur actuel et renvoie un paramètre de recherche applicable. Dans cet exemple, si la propriété de profil utilisateur aboutMeValue contient AppTest, le paramètre de recherche WebTemplate=STS est renvoyé. Ce paramètre limite l’étendue de recherche aux sites créés avec le modèle STS (Site d’équipe).

private string ResolveAdditionalFilter(string aboutMeValue)
{
    if (!aboutMeValue.Contains("AppTest"))
    {
        return "WebTemplate=STS";
    }

    return "";
}

Dans les deux cas, la méthode ProcessQuery dans la classe Default.aspx.cs utilise la classe SearchExecutor pour exécuter la requête de recherche et renvoyer les résultats.

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

Dans cette option, vous utilisez l’API CSOM JavaScript (JSOM) pour exécuter des recherches avec SharePoint service de recherche.

  • Cette API est disponible uniquement dans le code JavaScript côté client.

Quand est-elle adaptée ?

  • Cette API convient parfaitement aux SharePoint hébergés par un fournisseur et aux applications hébergées par un fournisseur qui s’exécutent sur n’importe quelle plateforme web.
  • Voici quelques exemples de ces scénarios : ASP.NET sites web MVC, sites web PHP, sites web Python, etc.

Prise en main

L’exemple de code suivant montre comment exécuter des recherches avec SharePoint Service de recherche avec l’API JavaScript CSOM (JSOM). Cet exemple exécute une recherche pour tous les éléments qui contiennent le terme « Général ».

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

Dans cette option, vous utilisez l’API REST pour exécuter des recherches avec SharePoint Service de recherche.

  • Cette API est la plus flexible, car elle est disponible dans le code côté serveur et côté client.
  • Le point SharePoint racine de l’API REST du service de recherche de recherche est :
    • https:// /site/_api/search/query
  • Voici quelques exemples simples :
    • Recherche par mot clé

      https://tenant/site/_api/search/query?querytext='{Apples}'
      
    • Sélection de propriétés spécifiques

      https://tenant/site/_api/search/query?querytext='test'&selectproperties='Rank, Title'
      
    • Tri

      https://tenant/site/_api/search/query?querytext='Oranges'&sortlist='LastModifiedTime:ascending'
      

Quand est-elle adaptée ?

Cette API convient parfaitement aux SharePoint hébergés par un fournisseur et aux applications hébergées par un fournisseur qui s’exécutent sur n’importe quelle plateforme web.

  • Voici quelques exemples de ces scénarios : ASP.NET sites web MVC, sites web PHP, sites web Python, services API Web ASP.NET, console .Net ou applications Windows, travaux web Azure, etc.

Prise en main

Option côté serveur

L’exemple suivant montre comment exécuter des recherches avec le service de recherche SharePoint avec l’API REST à partir de code .Net géré.

  • EmployeeDirectory (contenu de formation OfficeDev)

    La méthode Index de la classe HomeController.cs exécute une recherche pour tous les utilisateurs dont le nom commence par la valeur de texte sur laquelle l’utilisateur clique.

    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();
    

La façon de créer des SharePoint qui tirent parti de la recherche (O365 PnP Video) vous permet de découvrir EmployeeDirectory (contenude formation OfficeDev).

Option côté client

L’exemple de code suivant montre comment exécuter des recherches avec SharePoint service de recherche avec l’API REST à partir de JavaScript. Cet exemple exécute une recherche pour tous les éléments qui contiennent le terme « Lacrosse ».

$.ajax({
    url: "http://site/_api/search/" +
          "query?querytext='{Lacrosse}‘",
    method: "GET",
    headers: {
        "accept": "application/json;odata=verbose",
    },
    success: onSuccess,
    error: onError
});

Exemples PnP

S’applique à

  • Office 365 multi-locataire (MT).
  • Office 365 dédiés (D)
  • SharePoint 2013 en local