Présentation et personnalisation du moteur de recherche de MOSS 2007

Stéphane Eyskens

Cet article a pour but de présenter le moteur de recherche inclus dans MOSS 2007. J'aborderai également la manière de personnaliser ce moteur afin de l'exploiter au mieux.

- Titre : Présentation et personnalisation du moteur de recherche de MOSS 2007

- Auteur : Stéphane Eyskens

- Parution : 10 octobre 2007

- Licence : Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- I. Présentation du moteur

- II. Les sources de contenu (Content Sources)

- II-A. Les différents types de sources

- II-B. Création d'une source personnelle

- II-C. Les différentes manières de construire l'index

- II-C-1. Full Crawl

- II-C-2. Incremental Crawl

- II-C-3. Les règles (crawl rules)

- II-C-4. Les exclusions

- III. Les portées de recherche (scopes)

- III-A. Qu'est-ce qu'un scope?

- III-B. Créer un scope

- III-C. Ajout d'un scope dans la collection de sites

- IV. Créer un Search Center utilisant un scope personnel

- IV-A. Créer le search center

- IV-B. Créer les pages de recherche et de résultat

- IV-B-1. Création de la page de recherche

- IV-B-2. Création de la page résultat

- IV-C. Ajouter les onglets dans le search center qui pointent vers notre scope

- V. Ajouter une colonne personnelle (de liste) dans le moteur de recherche

- V-A. Création de notre colonne

- V-B. Ajout de la colonne dans les propriétés gérées par le moteur (managed property)

- V-C. Utilisation de notre propriété dans un moteur de recherche avancé

- VI. Utiliser une colonne liée aux profils utilisateurs dans le moteur de recherche

- VII. Personnalisation des résultats

- VII-A. Ajout de Best Bets et de mots clés

- VII-B. Personnalisation de l'affichage des résultats via XSLT

- VIII. Conclusion

I - Présentation du moteur

De la même manière que le moteur de WSS 3, le moteur de recherche de MOSS 2007 permet de rechercher un ou plusieurs mots dans le contenu des documents stockés dans Sharepoint. Il permet également de rechercher dans le metadata (métadonnée) associé aux documents ou aux listes personnelles ou encore aux profils utilisateurs.

Il permet également de créer des sources de recherche différentes de Sharepoint et des zones de recherche personnelles.

La gestion du moteur s'effectue dans la centrale d'administration au niveau du SSP (Shared Services Provider) ou éventuellement grâce à l'outil en ligne de commande stsadm. L'utilisation du moteur se fait quand à elle dans la partie applicative de Sharepoint c'est à dire au niveau des collections de sites. MOSS 2007 offre des modèles de sites facilitant la création d'espaces de recherche.

II - Les sources de contenu (Content Sources)

Les sources de contenu permettent d'effectuer des recherches sur des données issues de sources différentes. Cela va d'une ressource réseau partagée, au site Sharepoint ou au site Web hébergé sur un serveur tiers.

II-A - Les différents types de sources

Il existe actuellement cinq types de sources différents.

- Sharepoint Sites:Ce type permet de spéficier une source de données issue de Sharepoint

- Web Site:Ce type permet de spécifier n'importe quelle ressource externe se trouvant sur le web.

- File Shares:Ce type permet de spécifier une ressource réseau (partage) contenant des fichiers partagés et pour lesquels on désire effectuer des recherches

- Exchange public folders:Ce type permet de spécifier un répertoire Exchange

- Business Data:Ce type permet de spécifier une ressource contenue dans le BDC pour autant que celle-ci ait été construite avec les énumérateurs requis. Vous pouvez utiliser un bon exemple (AdventureWorks2000.xml) qui se trouve dans le SDK et qui fonctionne très bien

II-B - Création d'une source personnelle

Lorsque vous installez MOSS, une ressource est automatiquement créée, celle-ci est nommée "Local Office Sharepoint Server Sites". Elle permet d'effectuer une recherche sur tous les sites Sharepoint. Elle inclut par défaut toutes les applications créées dans Sharepoint. Chaque nouvelle application que vous créerez sera automatiquement ajoutée à ce content source et toutes les collections et sites contenus dans cette application seront automatiquement indexées par le moteur sauf exclusion explicite.

Pour créer une source personnelle, vous devez aller dans SSP=>Search Settings=>Content Sources=>Add Content Source et vous arrivez sur cet écran

Vous devez choisir le type de source, lui donner un nom et en fonction du type de source, vous devrez spécifier une URL à partir de laquelle le moteur doit crawler ou bien une application dans le cas d'un BDC.

Vous pourrez à partir de cet écran spécifier une planification automatique de l'exécution de la réindexation totale ou partielle. Dans notre exemple, on va créer une nouvelle source qui pointe sur un partage de fichiers. Nous utiliserons ensuite ce content source dans un scope. Il est donc important de procéder à cette étape avant de passer aux autres sections de ce tutoriel. Veuillez procéder comme suit:

- Créez un répertoire "Demo" sur votre disque dur, placez-y deux fichiers un word et un exel

- Partagez ce répertoire afin qu'il soit accessible via le chemin \\<votre machine>\\Demo

- Allez dans la centrale d'administration Sharepoint, créez une nouvelle source à partir de l'écran illustré ci-dessus

- Appelez-là "Demo", spécifiez le type "File Shares" et saisissez "\\<votre machine>\\Demo"

- Cochez la case "Start Full Crawl" et cliquez sur Ok

La nouvelle source doit être en train de s'indexer, elle aura de ce fait le status "Crawling Full", vous devez attendre que ce status passe en "Idle". Dans notre exemple, ce doit être très rapide car nous n'avons mis que deux documents dans la ressource partagée. Lorsque l'indexation est terminée, vous devriez constater que le nombre d'éléments dans votre index général a augmenté.

En cliquant sur Search Settings => Content Sources and Crawl Schedules, vous devriez à présent obtenir ceci

Nous réutiliserons cette source dans les sections suivantes.

II-C - Les différentes manières de construire l'index

II-C-1 - Full Crawl

On peut décider de reconstruire l'index de manière totale en spécifiant un Full Crawl, soit indexation totale. Lorsque l'on choisit ce type d'indexation, le système nettoie entièrement l'index existant et le reconstruit en repartant de zéro. Cette manière de procéder peut bien sûr prendre un certain temps en fonction des différentes sources définies dans le système.

Il est préférable d'éviter une réindexation complète pour des raisons de performance. Il est par contre obligatoire de refaire une indexation totale lorsque des règles d'indexation ont été ajoutées/modifiées/supprimées (voir Crawl Rules ici plus bas).

II-C-2 - Incremental Crawl

Un Incremental Crawl soit indexation partielle consiste à mettre à jour l'index existant en y ajoutant/supprimant les éléments nouveaux/supprimés contenus par les différentes sources. Une indexation partielle est moins coûteuse en terme de performance et doit donc être privilégiée comme tâche planifiée.

II-C-3 - Les règles (crawl rules)

Ces règles sont appliquées durant l'indexation totale ou partielle. Elles peuvent servir à exclure explicitement certaines URL, elles peuvent également servir à spécifier un compte d'authentification différent selon la resource indexée.

II-C-4 - Les exclusions

Cet écran permet de spécifier une liste d'URL pour lesquelles on ne souhaite pas obtenir de résultat dans le moteur de recherche. Une règle d'exclusion sera alors créée.

III - Les portées de recherche (scopes)

III-A - Qu'est-ce qu'un scope?

Un scope permet de spécifier une zone de recherche dans le but de permettre à l'utilisateur d'affiner sa recherche. Par défaut les scopes All Sites et People sont disponibles. Ceux-ci permettent donc à l'utilisateur d'effectuer une recherche soit dans tous les sites, soit de rechercher une personne. Ils ne peuvent donc pas effectuer une recherche dans la zone "Finance" ou "Ressources Humaines" par exemple. En créant des scopes personnels, on va pouvoir permettre à l'utilisateur de limiter ses recherches à une zone bien précise.

Les scopes répondent à une ou plusieurs règles qui vont permettre au moteur d'intégrer les résultats de l'indexation de manière à précisémment délimiter les résultats aux scopes définis.

Deux scopes sont automatiquement créés par le système, il s'agit de "All Sites" et de "People".

Le scope "All Sites" se compose de deux règles

All Content

Cette règle spécifie d'inclure tous les sites Sharepoint existants

contentclass = ....

Cette règle demande au système d'exclure tous les profils utilisateurs qui font bien sûr partie de "All Content" afin d'éviter que des résultats de recherche concernant des profils apparaissent à la fois dans une recherche de type "All Sites" et de type "People"

L'autre scope automatiquement créé est "People" et il demande au système de n'inclure que les ressources de type "Profil Utilisateur".

III-B - Créer un scope

Pour créer un scope, vous devez aller dans Search Settings->View Scopes->New Scope

Ensuite, vous devez lui ajouter une ou plusieurs règles. Celles-ci peuvent être de type:

- Web Address: permet de spécifier une URL à partir de laquelle il faut inclure/exclure le contenu dans le scope

- Property Query: permet de spécifier une condition sur une propriété de metadata autorisé

- Content Source: permet de spécifier une source de contenu parmi les sources définies sur le système. C'est ce type que nous utiliserons dans notre exemple

- All Content: indique au système de prendre tout le contenu.

Lorsque l'on a choisi un type de règle, il faut indiquer au système ce qu'il faut en faire

- Include: tous les éléments conformes à la règle seront inclus sauf ceux qui seraient exclus par une autre règle

- Require: chaque élément du scope doit être conforme à la règle quelles que soient les autres règles

- Exclude: chaque élément conforme à cette règle sera exclu du scope

Ajoutez le scope Demo avec la règle qui pointe sur la source de contenu "Demo" préalablement créée comme illustré sur l'image ci-dessous et cliquez sur Ok.

Lorsque vous avez ajouté le scope, vous pouvez revenir sur l'écran précédent (search settings) afin de forcer la mise à jour du scope en cliquant sur "Start Update" entouré en rouge dans l'image ci-dessous.

Ceci fait, cliquez sur "View Scopes" et ensuite sur "Refresh" jusqu'à ce que le status soit "Ready".

Lorsque votre scope est en état "Ready", il est prêt à être utilisé dans la partie applicative.

III-C - Ajout d'un scope dans la collection de sites

Pour pouvoir utiliser un scope personnel dans un centre de recherche, il faut au préalable l'ajouter dans la liste des scopes de la collection dans laquelle on souhaite les utiliser. Pour ce faire, cliquez sur Site Actions => Site Settings => Search Scopes. Vous arriverez dans l'écran suivant:

Vous devez à présent ajouter le scope "Demo Source" dans les groupes "Search Dropdown" et "Advanced Search" afin de pouvoir les utiliser dans les webparts utilisés dans les centres de recherche.

Pour les ajouter, cliquez respectivement sur les liens "Search Dropdown" et "Advanced Search", ensuite cochez le scope grâce à la case à cocher se trouvant à côté du libellé.

IV - Créer un Search Center utilisant un scope personnel

Un "Search Center" est un modèle de site permettant de créer aisément un moteur de recherche personnalisé.

IV-A - Créer le search center

Pour créer un search center, il suffit de cliquer sur "View All Site Content => Create => Sites and workspaces" pour arriver sur l'écran suivant:

Notez que la "Publishing Feature" doit être activée au niveau de la collection pour pouvoir créer un search center

Soyez certain de cliquer sur l'onglet "Enterprise" et ensuite de sélectionner l'entrée "Search Center". Cliquez ensuite sur OK.

Le site est à présent créé et vous disposez d'une zone de recherche permettant d'effectuer une recherche sur deux scopes. Les scopes All Sites et People

Le moteur est fonctionnel sur ces deux scopes. Vous pouvez dores et déjà effectuer l'une ou l'autre recherche pour vérifier son bon fonctionnement. Le but de l'exercice qui suit est d'insérer un troisième onglet qui porte sur notre scope "Demo Source".

IV-B - Créer les pages de recherche et de résultat

Chaque onglet présent dans le moteur de recherche pointe sur une page principale permettant d'effectuer une recherche et sur une page de résultat affichant les résultats correspondant à la recherche. Si l'on souhaite ajouter un nouvel onglet, il faut donc créer deux pages.

IV-B-1 - Création de la page de recherche

Cliquez sur Site Actions => Create Page pour obtenir l'écran suivant

Sélectionnez le modèle SearchMain comme illustré ci-dessus et cliquez sur Ok

IV-B-2 - Création de la page résultat

Cliquez sur Site Actions => Create Page pour obtenir l'écran suivant

Sélectionnez le modèle SearchResult comme illustré ci-dessus et cliquez sur Ok

IV-C - Ajouter les onglets dans le search center qui pointent vers notre scope

A présent, revenez sur la page principale de votre moteur de recherche. Cliquez sur Site Actions => Edit Page et ensuite cliquez sur "Add New Tab".

Liez ce nouveau tab à la page principale de recherche que vous avez créé précédemment. Lorsque vous cliquez sur Ok, le système vous redirige sur cette nouvelle page. Cliquez sur Site Actions => Edit Page pour modifier le webpart de recherche. Ensuite, modifiez le webpart comme illustré ci-dessous

Dans le panneau des propriétés du webpart, dans la rubrique "Miscellaneous/Divers", vous trouverez la propriété "Target search result page URL". Saisissez le nom de votre page de résultat préalablement créée comme illustré ci-dessous et cliquez sur Ok.

Effectuez maintenant une recherche en cliquant sur l'onglet "Demo Source" et ensuite sur Ok. Vous êtes redirigé vers la page de résultat "DemoSourceSearchResults.aspx". Cliquez ensuite sur Site Actions => Edit Page pour modifier le webpart "Search Core Results" afin de limiter la recherche au scope "Demo Source".

Modifiez le webpart Search Core Results comme illustré ci-dessous

Dans le panneau des propriétés du webpart, allez dans la section "Miscellaneous/Divers" et dans la propriété "Scope", saisissez "Demo Source".

Refaites la même recherche que précédemment, vous constaterez que cette fois, les résultats sont limités au scope spécifié. Dans la page de résultat, cliquez sur Site Actions => Edit Page afin d'ajouter un nouvel onglet (on ne l'a fait que pour la page principale jusqu'ici). Cliquez ensuite sur "Add New Tab" et créez l'onglet comme illustré ci-dessous

Ceci fait, il ne vous reste plus qu'à modifier le webpart "SearchBox" pour lui dire que la page de résultat est DemoSourceSearchResults.aspx comme nous l'avions fait lorsque nous avons ajouté l'onglet "Demo Source" dans la page principale de recherche.

Le search center doit à présent être fonctionnel sauf pour la partie recherche avançée qui ne devrait pas fonctionner lorsque vous l'activez à partir de votre onglet "Demo Source". Ceci est dû au fait que le webpart "SearchBox" sur vos pages de recherche principale et de résultat ne pointe pas vers la bonne URL. Soit vous le faites pointer vers la même URL que pour le scope "All Sites", soit vous crééz une page de recherche avancée personnelle, soit vous décidez de ne pas afficher le lien permettant d'effectuer une recherche avançée. Quoique vous fassiez, le paramétrage se fait dans les propriétés du webpart "SearchBox".

V - Ajouter une colonne personnelle (de liste) dans le moteur de recherche

Dans cette section, nous allons voir comment ajouter une colonne personnelle de metadata en tant que propriété gérée par le moteur de recherche (managed property) et utiliser ensuite celle-ci dans une recherche avancée.

V-A - Création de notre colonne

Pour l'exemple, créez simplement une colonne de type texte intitulée "Demo" dans une bibliothèque de documents. Ensuite, insérez un nouveau document en veillant bien à affecter une valeur à la colonne démo. En effet, si vous oubliez cette étape, vous ne retrouverez pas la propriété dans la liste des propriétés gérables. Nous référencerons ensuite cette propriété pour que le moteur de recherche puisse l'indexer.

V-B - Ajout de la colonne dans les propriétés gérées par le moteur (managed property)

Les propriétés gérées par le moteur sont listées dans la centrale d'administration au niveau du SSP => Search Settings => Metadata property mapping. Toute une série de propriétés existe déjà comme vous pouvez le voir ci-dessous

Elles peuvent d'ailleurs être utilisées dans les search center. Avant de pouvoir ajouter notre nouvelle propriété, il est imparatif de refaire un incremental ou un full crawl de Local Office Sharepoint Server Sites afin que celui-ci tienne compte de la nouvelle colonne que l'on a ajouté au niveau de notre bibliothèque. Pour ajouter notre propriété qui pointe sur la colonne Demo, il faut ensuite revenir dans les propriétés et cliquer sur "New Managed Property".

Vous arrivez sur l'écran suivant:

Après avoir donné un nom à votre propriété comme par exemple "Demo", cliquez sur "Add Mapping", dans la zone de texte, tapez "Demo" et ensuite cliquez sur "Find". Le système vous retourne la propriété.

Lorsque vous cliquez sur Ok, vous pouvez visualiser votre propriété

Cette nouvelle propriété ayant été enregistrée comme propriété gérable est désormais utilisable dans le moteur de recherche mais vous devez d'abord refaire un crawl

V-C - Utilisation de notre propriété dans un moteur de recherche avancé

Reprenez le search center précédemment créé, cliquez sur l'onglet All Sites et ensuite sur Advanced Search pour arriver sur l'écran de recherche avancée. Cliquez ensuite sur Site Actions => Edit Page pour modifier le webpart de recherche avancée comme illustré ci-dessous

Dans le panneau de propriétés du webpart, localisez la section "Properties" et ensuite la zone de texte "Properties". Cette zone contient le flux XML décrivant les propriétés devant être inclues dans la liste de colonnes sur lesquelles on peut effectuer une recherche.

Vous obtenez par défaut, la structure XML suivante:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LangDefs>
<LangDef DisplayName="Arabic" LangID="1"/>
<LangDef DisplayName="Bengali" LangID="69"/>
<LangDef DisplayName="Bulgarian" LangID="2"/>
<LangDef DisplayName="Catalan" LangID="3"/>
<LangDef DisplayName="Chinese" LangID="4"/>
<LangDef DisplayName="Croatian/Serbian" LangID="26"/>
<LangDef DisplayName="Czech" LangID="5"/>
<LangDef DisplayName="Danish" LangID="6"/>
<LangDef DisplayName="Dutch" LangID="19"/>
<LangDef DisplayName="Finnish" LangID="11"/>
<LangDef DisplayName="French" LangID="12"/>
<LangDef DisplayName="German" LangID="7"/>
<LangDef DisplayName="Greek" LangID="8"/>
<LangDef DisplayName="Gujrati" LangID="71"/>
<LangDef DisplayName="Hebrew" LangID="13"/>
<LangDef DisplayName="Hindi" LangID="57"/>
<LangDef DisplayName="Hungarian" LangID="14"/>
<LangDef DisplayName="Icelandic" LangID="15"/>
<LangDef DisplayName="Indonesian" LangID="33"/>
<LangDef DisplayName="Italian" LangID="16"/>
<LangDef DisplayName="Japanese" LangID="17"/>
<LangDef DisplayName="Kannada" LangID="75"/>
<LangDef DisplayName="Korean" LangID="18"/>
<LangDef DisplayName="Latvian" LangID="38"/>
<LangDef DisplayName="Lithuanian" LangID="39"/>
<LangDef DisplayName="Malay" LangID="62"/>
<LangDef DisplayName="Malayalam" LangID="76"/>
<LangDef DisplayName="Marathi" LangID="78"/>
<LangDef DisplayName="Norwegian" LangID="20"/>
<LangDef DisplayName="Polish" LangID="21"/>
<LangDef DisplayName="Portugese" LangID="22"/>
<LangDef DisplayName="Punjabi" LangID="70"/>
<LangDef DisplayName="Romanian" LangID="24"/>
<LangDef DisplayName="Russian" LangID="25"/>
<LangDef DisplayName="Slovak" LangID="27"/>
<LangDef DisplayName="Slovenian" LangID="36"/>
<LangDef DisplayName="Spanish" LangID="10"/>
<LangDef DisplayName="Swedish" LangID="29"/>
<LangDef DisplayName="Tamil" LangID="73"/>
<LangDef DisplayName="Telugu" LangID="74"/>
<LangDef DisplayName="Thai" LangID="30"/>
<LangDef DisplayName="Turkish" LangID="31"/>
<LangDef DisplayName="Ukrainian" LangID="34"/>
<LangDef DisplayName="Urdu" LangID="32"/>
<LangDef DisplayName="Vietnamese" LangID="42"/>
</LangDefs>
<Languages>
<Language LangRef="12"/>
<Language LangRef="7"/>
<Language LangRef="17"/>
<Language LangRef="10"/>
</Languages>
<PropertyDefs>
<PropertyDef Name="Path" DataType="text" DisplayName="URL"/>
<PropertyDef Name="Size" DataType="integer" DisplayName="Size"/>
<PropertyDef Name="Write" DataType="datetime" DisplayName="Last Modified Date"/>
<PropertyDef Name="FileName" DataType="text" DisplayName="Name"/>
<PropertyDef Name="Description" DataType="text" DisplayName="Description"/>
<PropertyDef Name="Title" DataType="text" DisplayName="Title"/>
<PropertyDef Name="Author" DataType="text" DisplayName="Author"/>
<PropertyDef Name="DocSubject" DataType="text" DisplayName="Subject"/>
<PropertyDef Name="DocKeywords" DataType="text" DisplayName="Keywords"/>
<PropertyDef Name="DocComments" DataType="text" DisplayName="Comments"/>
<PropertyDef Name="Manager" DataType="text" DisplayName="Manager"/>
<PropertyDef Name="Company" DataType="text" DisplayName="Company"/>
<PropertyDef Name="Created" DataType="datetime" DisplayName="Created Date"/>
<PropertyDef Name="CreatedBy" DataType="text" DisplayName="Created By"/>
<PropertyDef Name="ModifiedBy" DataType="text" DisplayName="Last Modified By"/>
</PropertyDefs>
<ResultTypes>
<ResultType DisplayName="All Results" Name="default">
<Query/>
<PropertyRef Name="Author" />
<PropertyRef Name="Description" />
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
</ResultType>
<ResultType DisplayName="Documents" Name="documents">
<Query>IsDocument=1</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Word Documents" Name="worddocuments">
<Query>FileExtension='doc' Or FileExtension='docx' Or FileExtension='dot'</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Excel Documents" Name="exceldocuments">
<Query>FileExtension='xls' Or FileExtension='xlsx' Or FileExtension='xlt'</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Presentations" Name="presentations">
<Query>FileExtension='ppt'</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
</ResultTypes>
</root>

Vous allez devoir ajouter votre propriété dans la section PropertyDefs et dans une ou plusieurs sous section de ResultTypes en fonction de ce que vous souhaitez permettre à l'utilisateur. Nous utiliserons All Results dans notre exemple.

En ajoutant donc ceci dans PropertyDefs:

<PropertyDef Name="Demo" DataType="text" DisplayName="Demo"/>

et ceci dans ResultType => All Results

<PropertyRef Name="Demo" />

Notre nouvelle propriété est utilisable dans la recherche comme vous pouvez le constater

Nous pouvons donc effectuer une recherche

et ceci nous donne comme résultat

VI - Utiliser une colonne liée aux profils utilisateurs dans le moteur de recherche

Comme pour le metadata personnel, on peut exposer une propriété liée aux profils des utilisateurs dans le moteur de recherche. L'approche est la même que pour le metadata à ceci près que l'on utilise les propriétés référencées au sein des profils. Le profiling dans MOSS mériterait un article mériterait un article dédié, nous n'aborderons donc pas l'intérêt de celui-ci dans ce tutoriel. Je vais simplement montrer comment ajouter la propriété "WorkPhone" présente par défaut dans les profils utilisateurs dans le moteur de recherche afin de permettre les utilisateurs d'effectuer des recherches dessus.

Tout d'abord, localisons cette propriété. Elle se trouve dans la centrale d'aministration au niveau des profils utilisateurs. L'image ci-dessous la montre.

Nous souhaitons donc afficher cette propriété dans les options de recherche d'une personne. Si vous cliquez sur votre search center, dans l'onglet "People" et ensuite sur "Search Options", vous obtenez ceci:

et nous souhaitons obtenir ceci

Pour obtenir ce résultat, il faut modifier la page en cliquant sur Site Actions => Edit Page et ensuite modifier le webpart People Search

Allez ensuite dans les propriétés du webpart et dans la section "Miscellaneous/Divers", vous retrouverez une zone de texte intitulée "Properties". Cette zone contient toutes les propriétés à afficher sous format XML qui par défaut, contient ceci (tronqué pour des raisons d'affichage)

<Properties>
<Property Name="FirstName" ManagedName="FirstName" .../>
<Property Name="LastName" ManagedName="LastName" .../>
<Property Name="Department" ManagedName="Department" .../>
<Property Name="JobTitle" ManagedName="JobTitle" .../>
<Property Name="Responsibility" ManagedName="Responsibility" .../>
<Property Name="Skills" ManagedName="Skills" .../>
<Property Name="QuickLinks" ManagedName="QuickLinks" .../>
</Properties>

Nous allons ajouter WorkPhone en ajoutant une ligne XML comme ceci

<Property Name="WorkPhone" ManagedName="WorkPhone" ProfileURI="urn:schemas-microsoft-com:sharepoint:portal:profile:WorkPhone"/>

Pour obtenir enfin ceci:

<Properties>
<Property Name="FirstName" ManagedName="FirstName" .../>
<Property Name="LastName" ManagedName="LastName" .../>
<Property Name="Department" ManagedName="Department" .../>
<Property Name="JobTitle" ManagedName="JobTitle" .../>
<Property Name="Responsibility" ManagedName="Responsibility" .../>
<Property Name="Skills" ManagedName="Skills" .../>
<Property Name="QuickLinks" ManagedName="QuickLinks" .../>
<Property Name="WorkPhone" ManagedName="WorkPhone" ..."/>
</Properties>

Voilà, le tour est joué, vous pouvez à présent effectuer une recherche en spécifiant une valeur pour workphone.

VII - Personnalisation des résultats

VII-A - Ajout de Best Bets et de mots clés

Il est possible d'utiliser des mots clés (keywords) et des synonymes afin d'orienter l'utilisateur vers des ressources plus significatives liée à sa recherche. Ceci peut se faire grâce à l'utilisation des Best Bests. Pour paramétrer des Best Bets, vous devez aller au niveau de votre collection dans Site Actions => Site Settings => Search Keywords pour obtenir cet écran

Vous pouvez ajouter un mot clé ainsi qu'un ou plusieurs synonymes qui si ils sont tapés dans le moteur par l'utilisateur déclencheront l'affichage du best bet.

Dans l'écran ci-dessus, j'ai défini le mot clé "Excel" auquel j'ai ajouté les synonymes "Document Excel" et "Sheet". Dès que l'un de ces mots sera saisi par l'utilisateur dans le moteur de recherche, celui-ci affichera automatiquement le(s) best best(s) lié(s) comme vous pouvez le constater ci-dessous

VII-B - Personnalisation de l'affichage des résultats via XSLT

Le webpart "SearchCoreResults" offre un bouton XSLT parmi ses propriétés. Il est possible de modifier ce script XSLT pour obtenir un affichage de résultat personnalisé. Le but étant ici de démontrer cette possibilité, je ne vais faire qu'une toute petite personnalisation. En standard, les liens affichés dans les résultats de la recherche permettent d'ouvrir des document/pages etc.. dans la page courante. La modification consistera simplement à les ouvrir dans une nouvelle fenêtre.

Pour modifier les résultats de recherche, effectuez une recherche, ensuite cliquez sur Site Actions => Edit Page => Localisez le webpart Search Core Results et modifiez le pour atteindre ses propriétés. Ensuite, cliquez sur le bouton XSL editor, copiez-collez tout le XSL dans Notepad.

Lorsque vous êtes dans le notepad, effectuez une recherche sur href="{$url}". Vous devriez tomber sur ceci:

<a href="{$url}" id="{concat('CSR_U_',$id)}" title="{$url}" dir="ltr">

Ajoutez simplement target="_blank" après le <a pour forcer l'ouverture dans une nouvelle fenêtre et répétez l'opération pour toutes les instances de href="{$url}"

Ceci n'est qu'une toute petite modification mais cela démontre qu'il est tout à fait possible d'intervenir sur la manière dont les résultats de la recherche sont affichés.

VIII - Conclusion

Ce tutoriel n'a pas couvert toutes les possibilités du moteur de MOSS 2007 mais a néanmoins fait un tour d'horizon permettant à l'administrateur de personnaliser la fonction de recherche dans MOSS.