Partager via


Procédure : ajouter une source de contenu

Dans Recherche de contenu d'entreprise dans Microsoft Office SharePoint Server 2007, vous indiquez quel contenu vous souhaitez que le service d'indexation de recherche analyse dans les sources de contenu qui sont configurées pour le fournisseur de services partagés du service de recherche.

Vous pouvez accéder aux sources de contenu du fournisseur de services partagés à partir de l'objet ContentSourceCollection du modèle objet Administration de la Recherche de contenu d'entreprise. Pour créer une source de contenu, utilisez la méthode Create de la classe ContentSourceCollection.

La procédure suivante indique comment créer par programme une source de contenu à l'aide du modèle objet de la Recherche de contenu d'entreprise.

Pour ajouter une source de contenu par programme

  1. Dans votre application, définissez des références pour les fichiers DLL suivants :

    • Microsoft.SharePoint.dll

    • Microsoft.Office.Server.dll

    • Microsoft.Office.Server.Search.dll

  2. Dans le fichier de classe de votre application console, ajoutez les instructions using suivantes vers le début du code avec les autres directives d'espace de noms.

    using Microsoft.SharePoint;
    using Microsoft.Office.Server.Search.Administration;
    
  3. Créez une fonction pour écrire les informations d'utilisation dans la fenêtre de la console.

    private static void Usage()
    {
       Console.WriteLine("Create Content Source");
       Console.WriteLine("Usage: CreateContentSource.exe ContentSourceName ContentSourceType startaddress [startaddress...]");
    }
    
  4. Dans la fonction Main() de l'application console, ajoutez un code pour vérifier le nombre d'éléments du paramètre args[] ; s'il y en a moins de 3, appelez la fonction WriteUsage() définie à l'étape 3.

    if (args.Length < 3)
    {
    Usage();
    return;
    }
    
  5. Ajoutez le code suivant pour récupérer l'objet Content pour le contexte de la recherche du fournisseur de services partagés. Pour plus d'informations sur la récupération du contexte de recherche, voir Procédure : renvoyer le contexte de recherche pour le fournisseur du service de recherche.

    /*
    Replace <SiteName> with the name of a site using the SSP
    */
    string strURL = "http://<SiteName>";
    SearchContext context;
    using (SPSite site = new SPSite(strURL))
    {
        Context = SearchContext.GetContext(site);
    }
    Content sspContent = new Content(context);
    
  6. Récupérez les valeurs spécifiées dans le paramètre args[] en spécifiant le nom et le type pour la source de contenu.

    string strName = args[0];
    string strType = args[1];
    
  7. Récupérez la collection de sources de contenu.

    ContentSourceCollection sspContentSources = sspContent.ContentSources;
    
  8. Déterminez si la collection de sources de contenu inclut déjà une source de contenu portant le même nom que celle spécifiée pour la source de contenu.

    if(sspContentSources.Exists(strName))
    {
        Console.WriteLine("A content source with that name already exists");
        return;
    }
    
  9. Si la méthode Exists renvoie false, créez une liste pour stocker les adresses de départ à configurer pour la source de contenu.

    List<Uri> startAddresses = new List<Uri>();
    for (int i = 2; i < args.Length; ++i)
    {
       startAddresses.Add(new Uri(args[i]));
    }
    
  10. Avec la valeur de la variable strType, déterminez quel type de source de contenu créer, appelez la méthode Create, puis spécifiez les adresses de départ pour la nouvelle source de contenu.

    Pour les objets CustomContentSource, FileShareContentSource, ExchangePublicFolderContentSource et LotusNotesContentSource, vous pouvez indiquer si le composant d'index de recherche analyse uniquement le dossier de chaque adresse de départ ou tous les sous-dossiers aussi en définissant la propriété FollowDirectories. Dans cet exemple, cette valeur est true pour ces sources de contenu.

    Pour l'objet SharePointContentSource, vous pouvez indiquer si le composant d'index de recherche analyse uniquement le site SharePoint spécifié dans l'adresse de départ ou tous les sites inclus dans ce nom d'hôte en utilisant la propriété SharePointCrawlBehavior. Dans cet exemple, la valeur de cette propriété demande d'analyser uniquement le site SharePoint.

    Pour l'objet WebContentSource, vous pouvez spécifier combien de sauts de page le composant d'index de recherche analyse en utilisant la propriété MaxPageEnumerationDepth, ainsi que le nombre de sauts de site que le composant d'index de recherche analyse en utilisant la propriété MaxSiteEnumerationDepth. Dans cet exemple, MaxPageEnumerationDepth a la valeur 100 et MaxSiteEnumerationDepth la valeur 10.

    switch (strType)
    {
    case ("custom"):
       CustomContentSource customCS = (CustomContentSource)sspContentSources.Create(typeof(CustomContentSource), strName);
       foreach (Uri startAddress in startAddresses)
       {
          customCS.StartAddresses.Add(startAddress);
       }
       customCS.FollowDirectories = true;
       customCS.Update();
       Console.WriteLine(strName + " created.");
       break;
    
    case ("exchange"):
       ExchangePublicFolderContentSource exchangeCS = (ExchangePublicFolderContentSource)sspContentSources.Create(typeof(ExchangePublicFolderContentSource), strName);
       foreach (Uri startAddress in startAddresses)
       {
          exchangeCS.StartAddresses.Add(startAddress);
       }
       exchangeCS.FollowDirectories = true;
       exchangeCS.Update();
       Console.WriteLine(strName + " created.");
       break;
    
    case ("file"):
       FileShareContentSource fileCS = (FileShareContentSource)sspContentSources.Create(typeof(FileShareContentSource), strName);
       foreach (Uri startAddress in startAddresses)
       {
          fileCS.StartAddresses.Add(startAddress);
       }
       fileCS.FollowDirectories = true;
       fileCS.Update();
       Console.WriteLine(strName + " created.");
       break;
    
    case ("lotusnotes"):
       LotusNotesContentSource lotusnotesCS = (LotusNotesContentSource)sspContentSources.Create(typeof(LotusNotesContentSource), strName);
       foreach (Uri startAddress in startAddresses)
       {
          lotusnotesCS.StartAddresses.Add(startAddress);
       }
       lotusnotesCS.FollowDirectories = true;
       lotusnotesCS.Update();
       Console.WriteLine(strName + " created.");
       break;
    
    case ("sharepoint"):
       SharePointContentSource sharepointCS = (SharePointContentSource)sspContentSources.Create(typeof(SharePointContentSource), strName);
       foreach (Uri startAddress in startAddresses)
       {
          sharepointCS.StartAddresses.Add(startAddress);
       }
       sharepointCS.SharePointCrawlBehavior = SharePointCrawlBehavior.CrawlSites;
       sharepointCS.Update();
       Console.WriteLine(strName + " created.");
       break;
    
    case ("web"):
       WebContentSource webCS = (WebContentSource)sspContentSources.Create(typeof(WebContentSource), strName);
       foreach (Uri startAddress in startAddresses)
       {
          webCS.StartAddresses.Add(startAddress);
       }
       webCS.MaxPageEnumerationDepth = 100;
       webCS.MaxSiteEnumerationDepth = 10;
       webCS.Update();
       Console.WriteLine(strName + " created.");
       break;
    
    default:
       Console.WriteLine("Content source type not recognized.");
       break;
    }
    
  11. Pour finir, vous pouvez inscrire la liste de sources de contenu de la collection du fournisseur de services partagés de sources de contenu (pour plus d'informations, voir Procédure : récupérer les sources de contenus pour un fournisseur de services partagés). Pour cela, ajoutez le code suivant dans votre application.

    foreach (ContentSource cs in sspContentSources)
    {
       Console.WriteLine("NAME: " + cs.Name + "  ID: " + cs.Id);
    }
    

Exemple

Voici le code complet de l'exemple d'application console décrite dans cette rubrique.

Conditions préalables requises

  • Assurez-vous qu'un fournisseur de services partagés est déjà créé.

Références de projet

Ajoutez les références de projet suivantes dans votre projet de code d'application console avant d'exécuter cet exemple :

  • Microsoft.SharePoint

  • Microsoft.Office.Server

  • Microsoft.Office.Server.Search

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Server.Search.Administration;
using Microsoft.SharePoint;

namespace CreateContentSourceSample
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                if (args.Length < 3)
                {
                    Usage();
                    return;
                }
/*
Replace <SiteName> with the name of a site using the SSP
*/
                string strURL = "<SiteName>";
                SearchContext context;
                using (SPSite site = new SPSite(strURL))
                {
                    Context = SearchContext.GetContext(site);
                }
                Content sspContent = new Content(context);
                string strName = args[0];
                string strType = args[1];
                ContentSourceCollection sspContentSources = sspContent.ContentSources;
                if (sspContentSources.Exists(strName))
                {
                    Console.WriteLine("A content source with that name already exists");
                    return;
                }
                List<Uri> startAddresses = new List<Uri>();
                for (int i = 2; i < args.Length; ++i)
                {
                    startAddresses.Add(new Uri(args[i]));
                }

                switch (strType)
                {
                    case ("custom"):
                        CustomContentSource customCS = (CustomContentSource)sspContentSources.Create(typeof(CustomContentSource), strName);
                        foreach (Uri startAddress in startAddresses)
                        {
                            customCS.StartAddresses.Add(startAddress);
                        }
                        customCS.FollowDirectories = true;
                        customCS.Update();
                        Console.WriteLine(strName + " created.");
                        break;
                    case ("exchange"):
                        ExchangePublicFolderContentSource exchangeCS = (ExchangePublicFolderContentSource)sspContentSources.Create(typeof(ExchangePublicFolderContentSource), strName);
                        foreach (Uri startAddress in startAddresses)
                        {
                           exchangeCS.StartAddresses.Add(startAddress);
                        }
                        exchangeCS.FollowDirectories = true;
                        exchangeCS.Update();
                        Console.WriteLine(strName + " created.");
                        break;
                    case ("file"):
                        FileShareContentSource fileCS = (FileShareContentSource)sspContentSources.Create(typeof(FileShareContentSource), strName);
                        foreach (Uri startAddress in startAddresses)
                        {
                            fileCS.StartAddresses.Add(startAddress);
                        }
                        fileCS.FollowDirectories = true;
                        fileCS.Update();
                        Console.WriteLine(strName + " created.");
                        break;
                    case ("lotusnotes"):
                        LotusNotesContentSource lotusnotesCS = (LotusNotesContentSource)sspContentSources.Create(typeof(LotusNotesContentSource), strName);
                        foreach (Uri startAddress in startAddresses)
                        {
                         lotusnotesCS.StartAddresses.Add(startAddress);
                        }
                        lotusnotesCS.FollowDirectories = true;
                        lotusnotesCS.Update();
                        Console.WriteLine(strName + " created.");
                        break;
                    case ("sharepoint"):
                        SharePointContentSource sharepointCS = (SharePointContentSource)sspContentSources.Create(typeof(SharePointContentSource), strName);
                        foreach (Uri startAddress in startAddresses)
                        {
                         sharepointCS.StartAddresses.Add(startAddress);
                        }
                        sharepointCS.SharePointCrawlBehavior = SharePointCrawlBehavior.CrawlSites;
                        sharepointCS.Update();
                        Console.WriteLine(strName + " created.");
                        break;
                    case ("web"):
                        WebContentSource webCS = (WebContentSource)sspContentSources.Create(typeof(WebContentSource), strName);
                        foreach (Uri startAddress in startAddresses)
                        {
                            webCS.StartAddresses.Add(startAddress);
                        }
                        webCS.MaxPageEnumerationDepth = 100;
                        webCS.MaxSiteEnumerationDepth = 10;
                        webCS.Update();
                        Console.WriteLine(strName + " created.");
                        break;

                    default:
                        Console.WriteLine("Invalid content source type.");
                        break;
                }
                foreach (ContentSource cs in sspContentSources)
                {
                    Console.WriteLine("NAME: " + cs.Name + "  ID: " + cs.Id);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
        private static void Usage()
        {
            Console.WriteLine("Create Content Source");
            Console.WriteLine("Usage: CreateContentSource.exe ContentSourceName ContentSourceType startaddress [startaddress...]");
        }
  }
}

Pour tester cet exemple de code, effectuez les opérations suivantes :

  1. Compilez le projet de l'application console.

  2. Ouvrez une fenêtre de commandes et accédez au répertoire contenant CreateContentSourceSample.exe.

  3. Dans la fenêtre de commandes, exécutez ceci :

    CreateContentSourceSample.exe <ContentSourceName> <ContentSourceType> <StartAddress1> <StartAddress2> etc…
    

    Notes

    Remplacez <ContentSourceName> par le nom de la source de contenu que vous souhaitez créer et <ContentSourceType> par un des éléments suivants pour indiquer le type de source de contenu à créer : custom, exchange, file, lotusnotes, sharepoint, web.

    Remplacez <StartAddress1> par la première adresse de départ pour la source de contenu, <StartAddress2> par la deuxième adresse de départ, et ainsi de suite.

Voir aussi

Autres ressources

Mise en route avec le modèle objet Administration de recherche de contenu d'entreprise
Procédure : renvoyer le contexte de recherche pour le fournisseur du service de recherche
Vue d'ensemble des sources de contenu
Procédure : récupérer les sources de contenus pour un fournisseur de services partagés
Procédure : supprimer une source de contenu
Procédure : gérer l'analyse d'une source de contenu par programme
Procédure : configurer par programme une planification d'analyse pour une source de contenu