SQL Server : Recherche approchée via le Moteur de recherche de texte intégral (FullText Search) et CONTAINS
Le moteur de recherche de texte intégral ou FullText Search vous connaissez ? C'est une composant à la base Windows qui très bientôt (prochaine béta) être intégré complètement à SQL Server 2008.
Ici l'idée n'est pas de vous dire de foncer sur SQL Server 2008, mais dore et déjà vous parler de ce qu'il y a actuellement.
Tout ce qui suit est supporté par SQL Server 2005, même SQL Server 2000 sauf pour la partie synonymes.
Ce moteur permet lorsqu'il est utilisé avec SQL Server d'utiliser 2 types de mot clefs
- FREETEXT, fonctionnement grossièrement comme un LIKE '%motclef%' OR LIKE '%motclef2%'
- CONTAINS, qui lui dispose de beaucoup d'options dont la forme de recherche la notion de poids, etc.
De quoi est capable CONTAINS ?
- Rechercher les formes dérivées d'un mot
- Rechercher de synonymes d'un mot
- Spécifier une proximité entre 2 mots
- Spécifier un poids pour les mots dans la recherche
Quelques exemples de syntaxes de CONTAINS :
Même type de que FREETEXT, on recherche un mot donné :
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
AND CONTAINS(Name, 'Mountain');
Recherche d'un terme ou d'un autre. Les combinaisons à base de « AND » fonctionnent aussi.
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Mountain" OR "Road" ')
Recherche d'un terme proche d'un autre
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'bike NEAR performance');
Recherche d'une forme dérivée d'un mot (pluriel, féminin, conjugaison, …)
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');
Recherche de termes avec des poids
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8),
comfortable weight (.4), smooth weight (.2) )' );
Recherche en utilisant des synonymes (exemple IE, peut permettre de trouver Internet Explorer)
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, ' FORMSOF (THESAURUS , IE) ');
Les synonymes étant stockés dans le fichier de langue correspondant dans le répertoire « C:\Program Files\Microsoft SQL Server\XXXXX\MSSQL\FTData », remplacez XXXX par votre répertoire d'instance.
Bref comme vous le voyez, vous avez de quoi mettre un vrai moteur de recherche dans votre serveur de base de données. Dans SQL Server 2008, le moteur sera de plus intégré directement dans SQL Server, çà ne sera plus un service externe, ce qui promet des performances encore meilleures.
Bonne recherche…
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :