Jiri's Shared IT knowledge

lundi, juin 06, 2005

SPS 2003 : Implémentation du moteur de recherche

Pour beaucoup (moi le premier), SPS 2003 est surtout considéré comme un produit portail. Simple, évolutif et assez puissant, il permet de mettre rapidement en ligne des portails de contenu de tous genre.

Mais pour une autre partie (moi aussi mais encore plus convaincu ), c'est surtout une superbe boite à outil, un framework de site complet dédié à .Net :

  • Modéle de site
  • Stockage documentaire
  • Gestionnaire de contenu
  • Profiling de contenu
  • Systéme d'alerte
  • Plateforme de Web service
  • SSO
  • ...
  • ET Moteur de recherche
C'est surtout ce dernier point qui m'interesse aujourd'hui.
Bien souvent, le volume de donnée d'un intranet ne permet plus une navigation assez fluide. Un bon moteur de recherche est souvent la solution

>>> Mais je ne parle pas d'un moteur de recherche dédié au site, mais plus d'un aggrégateur capable d'indexer tout et n'importe quoi quelle que soit sa provenance (indexeur crawleur)

Les données peuvent provenir d'un systéme tier, voir d'un fournisseur via HTTPS, ou encore d'un partage disque voir une boite de messagerie

Si le moteur Search de SPS sait gérer tout cela, pourquoi ne pas l'exploiter, le "consommer" de facon externe pour l'implémenter comme une brique de votre application?

Manque de documentation, de temps ? Pas de soucis , le MSDN vient a votre secours avec l'article suivant
How to Customize Your Search Using SharePoint Portal Server 2003 de Patrick Tisseghem U2U

J'insiste sur cette article car grand Fan de Site Server 3.0 à l'époque de NT4 + option pack, je mettais souvent en place des architecture de recherche sur des sites distants avec du contenu documentaire qu'il soit en BDD, Notes, filesystem, le tout lié à l'intranet métier

Plus une recherche libre style google mais plus une recherche metier et orienté

Voici un peu les possibilités

1. Recherche par le modéle object SPS :

  • Pour vos propres applications
  • Pour des WebParts métiers du styles : les 10 derniers documents word publiés

using Microsoft.SharePoint.Portal;
using Microsoft.SharePoint.Portal.Search;
using Microsoft.SharePoint.Portal.Topology;
TopologyManager topology = new TopologyManager();
PortalSite portal = topology.PortalSites[new Uri("
http://limassol:83
")];
PortalContext context = PortalApplication.GetContext(portal);
QueryProvider qp = new QueryProvider(context.SearchApplicationName);
string queryTemplate = "SELECT \"DAV:href\",\"DAV:displayname\", " + "\"urn:schemas.microsoft.com:fulltextqueryinfo:description\" " + "FROM ( TABLE Portal_Content..Scope()" + "UNION ALL TABLE Non_Portal_Content..Scope() ) " + "WHERE CONTAINS('\""+ textBoxKeyword.Text.Replace("'","''").Replace("\"","\"\"")+"\"') ";
DataSet ds = qp.Execute(queryTemplate);
DataGrid1.DataSource = ds;
DataGrid1.DataBind();

2. Extension et utilisation des controles SPS de recherche
Pas le temps de mettre au point un frontal de recherche : utiliser directement les controles SPS dans votre propres appli et spécifier les !
Leur comportement dépend de 4 propriétés simples :

  • QueryTemplateSelectPart for the SELECT part of the template.
  • QueryTemplateFromPart for the FROM part of the template.
  • QueryTemplateWherePart for the WHERE part of the template.
  • QueryTemplateOrderByPart for the ORDER BY part of the template.

3. La recherche via WebService : encore plus simple et plus utilisable
Dans une appli locale ou distante voir comme un service multi site (pour l'entreprise, un moteur global pour toute les applis).
Directement dans le pavé Office pour faciliter la rédaction de document.

En bref, un article indispensable à lire pour tout ceux qui veulent pousser encore un plus loin leurs applications existantes via l'utilisation, allez :) , l'intégration de modules SharePoint !!!

Et pour ceux que seul le concept de recherche passionne mais qui n'ont pas de SharePoint (les mahleureux ...), il existe NLucene, la version.Net du projet Lucene en Java

Site : http://sourceforge.net/projects/nlucene
Exemple : http://cephas.net/blog/2003/11/16/queryparser_in_nlucene.html