Pour les besoins d'une application web chez un client, je dois utiliser le moteur de recherche de texte intégral sur certaines tables de la base de données, méthode plus rapide que les requêtes TRANSACT-SQL.
Mon environnement de développement est Windows Vista et SQL Server 2005 SP1.

Pour mettre en place la solution, il faut commencer par définir un index sur la (les) table(s) dont on a besoin, pour ce faire dans SQL Server Management Studio (console de gestion de SQL Server 2005), il faut cliquer droit sur une table puis Index de texte intégral > Définir l'index sur le texte intégral... puis suivre l'assistant (choix de la clé primaire, des champs à indexer, ...) mais là, les ennuis commencent.

sqlserver_error
pas de création d'index de texte intégral si le service de recherche n'est pas démarré

Une première erreur survient, après quelques recherches et grâce aux outils de configuration de SQL Server 2005, je m'aperçois que le service MSFTESQL de recherche de texte intégral (SQL Server FullText Search (MSSQLSERVER) dans la console de services) n'est pas démarré, mais ce n'est pas pour autant qu'il en est capable.

service_error
le service de recherche de texte intégral dépend d'un autre service

Deuxième problème rencontré, et pour comprendre ce qui se passe, je suis obligé de fouiller dans le journal Système de Windows qui me dit plus clairement que :

Le service SQL Server FullText Search (MSSQLSERVER) dépend du service suivant : NTLMSSP. Ce dernier n’est peut-être pas installé.

Bonne nouvelle ! Et comment résoudre le problème au final ? En installant tout simplement le Service Pack 2 de SQL Server 2005.

Pour la suite il me reste à reprendre la configuration commencée ci-dessus et appliquer mes requêtes, dont voici rapidement quelques exemples.

Recherche de texte dans une colonne

SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Mountain" OR "Road" ')

Recherche de texte dans tous les champs

SELECT *
FROM Production.Product
WHERE CONTAINS(*, 'Mountain')

Recherche de texte avec le début d'un mot

SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');

Recherche de texte dérivé (féminin, pluriel, ...)

SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');

Pour aller plus loin, la documentation détaillée chez Microsoft c'est par ici.