Créer un filtre en C# Windows Search, Index Server ou SQL Server Fulltext

Présentation Index Server, autrefois distribué avec Windows NT4, a été remplacé depuis Windows XP par Windows Search. La recherche textuelle est quant à elle apparue sous SQL Server 2000. Ces trois services, fortement comparables, utilisent des librairies DLL " filtres " afin de lire les documents de l'utilisateur, en extraite les méta-données, ainsi que le contenu textuel, afin de les indexer. Actuellement, SQL Server Fulltext ne sais pas distinguer les méta-données des données textuelles. Ainsi, on retrouve par exemple l'auteur, le titre et le contenu du document dans le même index. Cependant, ces trois services se base sur les mêmes librairies, qui implémentent toutes l'interface IFilter. IFilter Membres L'interface IFilter n'implémente aucun membre d'interface. Méthodes BindRegion Cette méthode n'est pas utilisable pour le moment. Elle est présente pour une utilisation future uniquement. Il faut toujours retourner la constante E_NOTIMPL. GetChunk Cette méthode positionne le filtre sur le prochain chunk, et en retourne une description. Lors du premier appel, elle positionne le filtre sur le premier chunk et en retourne la description. Paramètres : out STAT_CHUNK : description du chunk en cours. Valeurs de retour possibles : · S_OK : La récupération de la description du chunk s'est déroulée correctement. · FILTER_E_END_OF_CHUNKS : Il n'y a plus de chunk à lire. On n'a pas alimenté le paramètre de retour. · FILTER_E_EMBEDDING_UNAVAILABLE : Le chunk qu'on tente de lire est un document incorporé qu'on ne sait pas indexer. · FILTER_E_LINK_UNAVAILABLE : Le chunk qu'on tente de lire est un lien vers un document qui n'existe pas. · FILTER_E_PASSWORD : Problème d'accès au chunk lié à la sécurité (mot de passe erronné, privilèges pas assez importants, etc.) · FILTER_E_ACCESS : Problème d'accès général (n'importe quel autre problème d'accès, qui n'est pas lié à la sécurité) Gestion des documents incorporés : Si le filtre utilisé sur un document incorporé retourne FILTER_E_END_OF_CHUNKS, alors on doit traiter le chunk suivant dans le document appelant. Structure STAT_CHUNK : Un identifiant de chunk doit être unique. Si un document incorporé retourne un identifiant déjà utilisé, il faut l'écraser par un autre identifiant afin de s'assurer qu'il est unique. La valeur zéro n'est pas valide pour un identifiant de chunk. Si la propriété BreakType est CHUNK_NO_BREAK, alors seul l'identifiant doit être mis à jour. Les autres propriétés seront ignorées par l'appelant. Membres : idChink (ulong) : Identifiant du chunk. Doit être suppérieur à zéro, et unique pour l'instance du IFilter. breakType (CHUNK_BREAKTYPE) : Type de séparation avec le chubk précédent. Il s'agit d'une énumération. GetText Cette méthode retourne le texte du chunk couranrt. GetValue Cette méthode retourne les valeurs du chunk courant. Init Cette méthode initialise le filtre. Adaptation à C# Sources : http://msdn.microsoft.com/en-us/library/ms691105(v=vs.85).aspx