Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

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 :
Publié mercredi 19 décembre 2007 16:19 par christian

Commentaires

mercredi 19 décembre 2007 19:51 by cyril

# re: SQL Server : Recherche approchée via le Moteur de recherche de texte intégral (FullText Search) et CONTAINS

C'est pas très clair :(

Actuellement le full text de SQL Server 2005 permet de le faire ?

ou alors il faut attendre SQL 2008 pour profiter de tout ce que nous montre. Car si SQL 2005 permet de faire tout ça, ça m'interesse pour un site sur lequel il y a beaucoup de recherche ;-)

jeudi 20 décembre 2007 10:02 by guldan

# re: SQL Server : Recherche approchée via le Moteur de recherche de texte intégral (FullText Search) et CONTAINS

en fait SQL Server 2005 dispose d'un moteur Full-Text permettant de faire les recherches listées dans ce post, mais c'est un service externe au moteur relationnel (c'est la raison pour laquelle mon client a abandonné l'idée de l'utiliser en SQL 2005).

L'intégration dans le moteur relationnel dans SQL Server 2008 semble être une avancée significative pour les performances. Wait and see !

jeudi 20 décembre 2007 10:07 by christian

# re: SQL Server : Recherche approchée via le Moteur de recherche de texte intégral (FullText Search) et CONTAINS

Effectivement tout ce qui dans ce post est supporté par SQL Server 2000, 2005 et par 2008.

2000 ne supporte pas les synonymes. Et sous 2000 & 2005 il s'agit d'un service externe, il a son propre stockage et est très consomateur de CPU.

Le principal pb lié à l'utilisation d'un service externe, c'est que SQL Server n'a aucun moyen d'optimiser les requêtes Full Text avec les siennes, étant donné qu'il n'a pas la main les données et le service.

jeudi 20 décembre 2007 11:49 by RaptorXP

# re: SQL Server : Recherche approchée via le Moteur de recherche de texte intégral (FullText Search) et CONTAINS

J'ai une question qui n'a pas trop de rapport avec le post, mais comment faire pour avoir un index sur une colonne qui contient du texte de taille variable ? Lorsque j'utilise un VARCHAR, il m'est impossible de définir un index sur cette colonne.

jeudi 20 décembre 2007 12:03 by christian

# re: SQL Server : Recherche approchée via le Moteur de recherche de texte intégral (FullText Search) et CONTAINS

C'est possible, mais il faut pas qu'il y est plus de 900 octets dedans (900 caractères en général).

jeudi 20 décembre 2007 23:14 by RaptorXP

# re: SQL Server : Recherche approchée via le Moteur de recherche de texte intégral (FullText Search) et CONTAINS

Ok, ca doit etre pour ça que ca ne marche pas avec un VARCHAR(MAX)

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TCB : Travailler en équipe sans réseau par The Mit's Blog le il y a 25 minutes

- Accès anonyme et les pages Forms / viewlsts.aspx... par Nicolas Humann le il y a 4 heures et 18 minutes

- l'Atelier 4 du coach C# est disponible par Bernard Fedotoff le il y a 5 heures et 53 minutes

- [WPF] Formatter l’affichage lors d’un binding, via StringFormat par Thomas Lebrun le il y a 10 heures et 55 minutes

- WSC08 : Le bilan, Les Photos, Les Webcasts à voir ou à revoir par Blog de Daniel TIZON [daniel] le il y a 20 heures et 3 minutes

- SharePoint et ses DB : Avez vous pensé à les "Tweaker" ? par The Mit's Blog le il y a 20 heures et 32 minutes

- NTttcp : Mesurer la vitesse d'un réseau par Blog d'Olivier Huet le il y a 20 heures et 56 minutes

- Un nouveau quizz par Matthieu MEZIL le il y a 23 heures et 40 minutes

- Webcast ADO.NET Data Services par Matthieu MEZIL le il y a 23 heures et 43 minutes

- edmx : mise à jour du modèle depuis la base par Matthieu MEZIL le 10-06-2008, 17:47