Vous êtes sur la page 1sur 27

Utilisation du full-text en Sql Server (2000 et 2005)

Par
Date de publication : 24 janvier 2006
Dernire mise jour : 24 janvier 2006

Utilisation du full-text en Sql Server (2000 et 2005) par

I - Prsentation............................................................................................................................................................ 3
II - Dfinition du terme "Full-Text"............................................................................................................................... 4
III - Historique du Full-Text dans Sql Server...............................................................................................................5
IV - Concepts du Full-Text...........................................................................................................................................6
V - Architecture au sein de Sql Server....................................................................................................................... 7
VI - Principe de l'indexation.........................................................................................................................................8
VI - Principe du questionnement................................................................................................................................. 9
VIII - Indexation full-text.............................................................................................................................................10
IX - Questionnement full-text..................................................................................................................................... 12
X - Classement d'un rsultat..................................................................................................................................... 14
XI - Paging de rsultats.............................................................................................................................................15
XII - Indexation d'un catalogue..................................................................................................................................16
XIII - Indexation d'une table...................................................................................................................................... 17
XIV - Conseils d'utilisation......................................................................................................................................... 19
XV - Procdures stockes personnelles permettant la recherche full-text............................................................... 20
XVI - Questionnement full-text au travers de fichiers............................................................................................... 24
XVII - Amliorations dans Sql Server 2005 par rapport Sql Server 2000..............................................................25
XVIII - Remarques..................................................................................................................................................... 26
XIX - Conclusion........................................................................................................................................................ 27

-2-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

I - Prsentation
Tout site qui se veut complet et qui comporte beaucoup d'informations se doit d'avoir une fonctionnalit de recherche
simple d'utilisation et performante.
Les pages de recherche doivent tre simples, un peu l'image de Google. L'interface est minimal avec un simple
champ pour y mettre les critres, un bouton et de simples textes en rsultats. La rapidit de la rponse est plus
importante que la mise en page des rsultats dans ce type de page.
Cette recherche s'appuie sur Sql Server pour ce qui est de la base de donnes. Dans ce document, nous allons voir
la manire d'implmenter cette recherche au sein de la version 8.0 de Sql Server, plus connue sous le nom de Sql
Server 2000. Sql Server 2005 a gard le mme moteur d'indexation fulltext.

-3-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

II - Dfinition du terme "Full-Text"


La technologie full-text permet de crer des indexes sur base de mots non parasites et d'utiliser ces indexes pour
des recherches (avec support linguistique) ainsi que des recherches de proximit.
Il est important de comprendre ces trois dfinitions conceptuelles pour rellement saisir le fonctionnement de cette
technologie.
Les mots parasites sont les mots de liaisons, les pronoms, tels que " je ", " de ", " car " et bien d'autres. Ceci
permet d'viter d'avoir comme rsultat des donnes fausses par ces mots. Ainsi, si l'on effectue une recherche avec
comme critre la phrase " je veux une classe mfc qui permet de faire du gdi ", seuls les mots " classe ", " mfc " et
" gdi " seront pris en compte.
Le support linguistique permet de dfinir, en interne, toute une srie de mots qui drivent de ceux qui forment les
critres. Ainsi, pour le mot " nager ", le systme effectuera la recherche avec les mots " nager ", " nage ", " nag(e) ".
La recherche de proximit permet de spcifier qu'un mot doit se trouver prs d'un autre. Dans le cas de SqlServer,
il s'agit d'un " rayon " de 50 mots. Ce nombre est fix et n'est pas paramtrable.
On notera que Sql Server est trs proche de la norme SQL:1999 Module Multimdia (MM).

-4-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

III - Historique du Full-Text dans Sql Server


Cette fonctionnalit est apparue dans la version 7.0 de Sql Server. Le noyau utilis par cette fonctionnalit est celui
de Microsoft Search qui est galement utilis dans Microsoft Exchange et Microsoft SharePoint Portal Server.
Alors que dans la version 7.0, la recherche se limitait des recherches de base, les performances, les indexes et
les autres lments ncessaires pour cette utilisation ont t revus dans la version 2000. Il est ainsi possible de faire
des recherches dans des documents facilement.
Au travers de ce document, nous allons voir comment mettre en place la recherche full-text tape par tape en allant
de la vrification de la prsence du service jusqu'au questionnement.

-5-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

IV - Concepts du Full-Text
Il existe quatre points fondamentaux par rapport l'architecture full-text :
- grer les dfinitions des tables et des colonnes qui sont enregistres comme tant utiliss par les recherches full-text
- grer la population des indexes
- effectuer les recherches
- mettre jour les indexes (synchronisation)
Chacun de ces concepts sont dtaills dans la suite du document sparment.

-6-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

V - Architecture au sein de Sql Server


Comme on peut le voir sur le schma qui suit, l'architecture est base sur un service nomm Microsoft Search. Il
s'agit du service qui gre l'indexation et la recherche au sein du full-text. Il comprend ainsi un moteur d'indexation
et un moteur de recherche.
Ce service accde un catalogue d'indexes. Il s'agit en fait d'une srie de fichiers qui ne se trouvent pas dans la base
de donnes mais bien dans le systme de fichiers classique. Ce sont ces fichiers qui contiennent les diffrents mots
de chaque ligne qui aura t pralablement indexe.
Il est primordial de garder en tte la scission entre les indexes classiques et les indexes full-text.

Le service Microsoft Search se charge de l'indexation full-text (il reoit les informations, les trie, les classe) ainsi
que du questionnement.
Le dialogue entre Sql Server et le service se fait l'aide d'un composant interne Sql Server.
Avant l'arrive de cette technologie, il tait ncessaire d'utiliser un composant extrieur pour raliser ces oprations,
ce produit grant les diffrents indexes au travers de fichiers enregistrs dans le systme de fichiers classiques,
rendant trs difficile la combinaison d'une recherche full-text avec des requtes relationnelles.
Pour excuter Microsoft Search, il existe divers moyens :
- par le menu dans Enterprise Manager
- par le gestionnaire de services
- par la commande dos " net start mssearch "
- par le service manager de Sql Server.
Il n'y a qu'un service Microsoft Search par serveur. Celui-ci est install si l'on en a fait la demande lors de l'installation
d'Sql Server.
Microsoft Search est Sql Server ce qu'est Microsoft Indexing Service Windows NT. Effectivement, MS Search
permet l'indexation de textes alors que MS Indexing Service permet l'indexation des fichiers.

-7-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

VI - Principe de l'indexation
Comme cela a dj t signal, les indexes ne sont pas stocks dans une base SqlServer mais bien dans des fichiers
qui sont grs par le service. Il peut y avoir 256 catalogues d'indexes full-text par serveur.
C'est pourquoi, lors d'un backup ou d'une restauration, les catalogues permettant le full text ne sont pas pris en
compte. Ce n'est d'ailleurs pas ncessaire vu que le catalogue peut tre recr (doit tre recr pour tre plus prcis)
afin de tenir compte de toutes les nouvelles informations (et de celles qui sont effaces).
L'indexation des textes se fait de manire ponctuelle et non lors de chaque ajout, suppression ou modification de
donnes ce qui permet d'viter une dtrioration des performances. Il faut galement noter que le fait de ne pas
indexer directement peut rendre les rsultats d'une demande incomplets voire incorrects puisqu'ils se basent sur des
donnes prsentes un moment t.
Comme on peut le voir, il y a de fortes diffrences entre les indexes classiques et les indexes full-text. Voici un petit
rcapitulatif des diffrences :
Indexes classiques
Stocks dans la base de donnes
Plusieurs indexes par table
Mis jour automatiquement
Manipulation par de l'SQL classique
Non groups

Indexes full-text
Stocks dans un fichier dans le systme de
fichiers
Un seul index par table
Mise jour sur demande
Manipulation par des procdures stockes
Groups

Lors d'une indexation, les valeurs de la colonne dont indexer sont passs Microsoft Search qui dtermine les
lignes rindexer comme on peut le voir sur le schma suivant :

-8-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

VI - Principe du questionnement
On ne cessera de le rpter, c'est bien le service Microsoft Search qui s'occupe du questionnement des indexes.
Le numro des lignes correspondantes aux critres sont envoyes du service Sql Server qui se charge de faire la
liaison entre les numros de ligne et les donnes elles-mmes.
Tout cela est rsum dans le schma suivant :

-9-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

VIII - Indexation full-text


Il faut avoir le rle sysadmin ou db_owner pour la base spcifie pour pouvoir excuter ces procdures.
Voici les tapes une par une pour indexer selon le concept du full-text au sein de Sql Server :
Vrification
Il est possible de vrifier la prsence du full-text l'aide de la commande suivante :
Vrification pralable : le full-text est il activ ?
select databaseproperty('nomdelabase' ,'IsFulltextEnabled');

Activation du full-text
Si la commande prcdente ne renvoie pas la valeur 1, il faut activer le full-text. Ceci se fait au niveau de la base
par la commande :
Activation du full-text
use nomdelabase
exec sp_fulltext_database 'enable'

Cration du catalogue
La premire chose est de crer un catalogue dans lequel seront stocks les diffrents indexes :
Cration d'un catalogue full-text
exec sp_fulltext_catalog 'nomducatalogueacreer', 'create'

On ne cesse d'insister mais il faut rappeler que le catalogue ne se trouve pas dans Sql Server lui-mme mais bien en
tant que fichier dans le systme de fichiers. L'interrogation du catalogue full-text requiert une forte activit d'entre /
sortie dans les fichiers. C'est pourquoi il est prfrable de spcifier un disque physique diffrent de celui couramment
utilis pour y placer les fichiers contenant les catalogues.
La dfinition du rpertoire de travail, si ce n'est celui par dfaut, se fait lors de la cration du catalogue, soit :
Cration d'un catalogue full-text en spcifiant le chemin
exec sp_fulltext_catalog 'nomducatalogueacreer', 'create', 'disque:\rpertoire'

Indexation d'une table


Chaque table qui comporte des colonnes indexer pour la recherche full-text doit tre signale comme indexable.
Pour cela, il est ncessaire, au pralable, d'avoir cr une cl primaire ou d'avoir une colonne pouvant prtendre tre
cl primaire, c'est dire une cl unique, qui ne peut tre " null " et sur une colonne unique.
L'appel cette procdure a pour effet d'ajouter des mtas informations dans les tables systmes concernant le
catalogue full-text ainsi que la table ajoute.
Il n'y a aucune indexation qui ait t effectue ce moment.
Ajout d'une table la liste des tables indexes pour le full-text
exec sp_fulltext_table 'table', 'create', 'nomducataloguefulltext', 'nomclprimaire'

Indexation d'une colonne


L'ajout des colonnes indexer est l'tape o il est ncessaire d'tre le plus pointilleux. Effectivement, un mauvais
paramtrage empchera d'obtenir des rsultats probants lors des recherches. Il est possible, par exemple, de
spcifier la langue du contenu de la colonne. Sql Server s'en sert pour dcliner certains mots. La ponctuation est
- 10 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

diffrente d'une langue l'autre galement. Ce choix est donc trs important. Dans le cas de la langue franaise, le
code hexadcimal passer comme paramtre est 0x040c. Si ce paramtre est omis, le choix se porte sur " neutre ".
La liste des mots parasites peut galement tre modifie. Il est ainsi possible d'ajouter " br " comme un sparateur
puisqu'il s'agit d'un sparateur pour l'HTML. Cette liste se trouve dans \Mssql\Ftdata\Sqlserver\Config.
Il est galement possible de spcifier la langue par dfaut pour la recherche full-text l'aide de " sp_configure ".
L'appel cette procdure ne cre toujours pas les indexes proprement dit mais enregistre la colonne comme tant
une colonne indexer comme dans le cas des tables.
Ajout d'une colonne la liste des colonnes indexes pour le full-text
exec sp_fulltext_column 'table', 'colonne', 'add', 0x040c

Indexation des valeurs


L'indexation peut se faire de plusieurs manires, cependant la syntaxe ne change pas.
L'indexation peut se faire sur une table
Indexation d'une table
exec sp_fulltext_table 'table', 'start_full'

ou sur tout le catalogue


Indexation d'un catalogue
exec sp_fulltext_catalog 'nomducatalogue', 'start_full'

- 11 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

IX - Questionnement full-text
Nous l'avons vu dans le paragraphe consacr au principe du questionnement full-text, il faut lier les valeurs (les
numros de lignes) retournes par Microsoft Search avec celles contenues dans la base de donnes. Voici ds lors
le type de requtes utiliser pour effectuer cela.
Il existe quatre prdicats qui permettent d'effectuer ces recherches : Contains, FreeText, ContainsTable et
FreeTextTable. Ceux-ci sont dcris dans la suite de ce paragraphe.
L'utilisation de ces prdicats se fait uniquement sur des colonnes de type char, varchar, text, nchar, nvarchar, ntext.
Contains
Cette mthode renvoie 1 si la colonne spcifie contient les mots ou phrases spcifis comme critres. Il n'y a aucune
notion de classement c'est pourquoi on l'utilisera que trs peu si la pertinence des informations est importante.
Les critres peuvent tre :
- un mot ou une phrase
- le prfixe d'un mot ou d'une phrase (*)
- un mot ou une phrase qui est proche d'une autre (NEAR ou ~)
Utilisation de NEAR
WHERE CONTAINS(colonne, 'mot1 NEAR mot2')

- un mot qui est un driv d'un autre (FORMSOF et INFLECTIONAL) :


Utilisation de FORMSOF et INFLECTIONAL
WHERE CONTAINS(colonne, 'FORMSOF(INFLECTIONAL, mot)') ;

- une srie de mots ou de phrases qui ont un " poids " chacun (ISABOUT et WEIGHT) :
Utilisation de ISABOUT
WHERE CONTAINS(colonne, 'ISABOUT (mot, mot, mot)')

Utilisation de ISABOUT et WEIGHT


WHERE CONTAINS(colonne, 'ISABOUT (mot WEIGHT(.1), " mots " WEIGHT(.4), mot WEIGHT(.9)')

Ce prdicat utilise, en interne, le " ContainsTable " qui sera dcrit ci-dessous et effectue la jointure automatiquement.
C'est pourquoi, principalement dans le cas d'une application Web, il est prfrable d'utiliser ContainsTable quitte
ne pas utiliser toutes les informations retournes.
Elle effectue une recherche sur la correspondance exacte de tous les termes spcifis dans la clause " critres ".
Par rapport FreeText qui sera prsente ci-dessous, la recherche en utilisant cette mthode est plus rapide. Il est
cependant ncessaire d'effectuer un filtre sur les mots parasites sans quoi la recherche ne reverra aucun rsultat
lors de la recherche. Dans certains cas, le systme peut mme renvoyer une exception du type " Your query contains
only noise words ".
Voici un exemple d'utilisation de ce prdicat. Comme on le voit, la syntaxe ressemble celle utilise par EXISTS.
Exemple d'utilisation de CONTAINS
SELECT colonne1
FROM table
WHERE CONTAINS(colonne2, 'mot')

FreeText

- 12 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

Identique " Contains " si ce n'est que l'on peut utiliser des phrases entires comme critres. Ces phrases peuvent
tre une phrase de tous les jours. C'est ici que le stemming (la dclinaison) prend forme.
Puisque la recherche est plus avance que celle utilise par Contains, les ressources processeur sont galement
plus utilises. Le calcul du classement est plus sophistiqu galement.
Il est tout de mme important de noter que, malgr l'extrme complexit de ce type de recherche, elle reste tout de
mme trs rapide. Une recherche sur quelques milliers de lignes indexes donne un rsultat en moins d'une seconde.
Gnralement c'est l'utilisation de cette mthode qui est choisie dans le cadre d'une application web.
Exemple d'utilisation de FREETEXT
SELECT colonne1
FROM table
WHERE FREETEXT(colonne2, 'phrase complete avec des virgules, des points et des mots parasites.')

ContainsTable
Les paramtres sont identiques ceux du prdicat CONTAINS. Ce prdicat renvoie une table contenant diffrentes
informations qui sont principalement la cl qui est utilise pour faire le lien entre les donnes indexes et les donnes
stockes dans la base de donnes et le classement de cette ligne.
Exemple d'utilisation de CONTAINSTABLE
SELECT Extern_Table.colonne, Key_Table.RANK
FROM table AS Extern_Table
INNER JOIN CONTAINSTABLE(table, colonne, 'mot1 AND mot2' ) AS Key_Table
ON Extern_Table.colonneID = Key_Table.[KEY]
ORDER BY Key_Table.RANK DESC

FreeTextTable
Les paramtres sont identiques ceux du prdicat FREETEXT.
Pour ce qui est des colonnes de la table de retour, elles sont identiques celle renvoye par ContainsTable.
Il s'agit du prdicat gnralement utilis lors des recherches sur le web. Il est moins restrictif que ContainsTable mais
est lgrement plus lente. Ce prdicat permet surtout des recherches plus intuitives.
Exemple d'utilisation de FREETEXTTABLE
SELECT Extern_Table.colonne, Key_Table.RANK
FROM table AS Extern_Table
INNER JOIN FREETEXTTABLE(table, colonne, 'critres' ) AS Key_Table
ON Extern_Table. colonneID = Key_Table.[KEY]
ORDER BY Key_Table.RANK DESC

- 13 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

X - Classement d'un rsultat


Les rsultats des recherches sont classs, si l'on a utilis ContainsTable ou FreeTextTable, afin de savoir lequel des
rsultats est le plus pertinent.
Parmi les diffrents facteurs intervenant dans le calcul du classement, on peut noter entre autres la frquence du mot
dans un champ. Un autre facteur est le nombre total d'occurrences du mot dans la table.
Le classement est relatif. Ceci signifie que le classement d'une ligne peut tre modifi suite la modification des
valeurs d'une autre ligne.
Etant donn que les classements sont relatifs sur une table uniquement, il pourrait tre avantageux de crer une table
supplmentaire contenant les informations indexer en faisant cependant attention la cohrence des informations.

- 14 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

XI - Paging de rsultats
Le paging de rsultats consiste afficher un certain nombre de rsultats l'cran et permettre la navigation vers
d'autres pages contenant la suite des rsultats.
Il n'existe aucune mthode efficace 100% pour effectuer du paging au travers de rsultats d'une telle procdure.
Effectivement, les classements peuvent tre modifis suite une modification des valeurs ou simplement des
rsultats de mme classement peuvent se trouver inverss d'une requte l'autre. Ainsi, on pourrait se trouver face
la situation pareille : des rsultats se trouvent dans la deuxime page de rsultats lors de l'affichage de la premire
page et inversement.
De nouveau, ceci se comprend aisment si l'on garde bien l'esprit la sparation des indexes full-text et des donnes.
Parmi les solutions les plus efficaces, on peut citer la mise en cache des informations afin d'viter les diffrentes
requtes. Cela a deux avantages : les donnes seront toujours visibles dans le mme ordre et il n'est pas ncessaire
d'effectuer plusieurs requtes, ce qui diminue les temps de rponse.
Une autre solution serait d'utiliser une table temporaire. Dans ce cas, l'ordre des lments ne sera pas modifi d'une
requte l'autre sauf si cette table est mise jour.

- 15 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

XII - Indexation d'un catalogue


Nous allons considrer que le catalogue full-text a t cr. Si ce n'est pas le cas, il est conseill d'effectuer les
tapes dcrites dans le paragraphe intitul " Activation du full-text ".
Indexation complte
L'indexation de toutes les lignes de toutes les tables que l'on a signales comme indexables se fait une seule
commande. Cette commande supprime tous les indexes et rindexe entirement les valeurs.
Indexation complte
exec sp_fulltext_catalog 'catalogue_fulltext', 'start_full'

Indexation incrmentale
Contrairement l'indexation complte, cette commande permet d'indexer uniquement les lignes qui ont subies un
changement. Il faut pour cela qu'une colonne de type timestamp soit prsente dans chacune des tables indexer.
Indexation incrmentale
exec sp_fulltext_catalog 'catalogue_fulltext', 'start_incremental'

Arrt de l'indexation
Il est possible d'arrter l'indexation en cours. Ceci est utile principalement si l'on se rend compte que cette indexation
consomme trop de ressources processeur.
Arrt de l'indexation
exec sp_fulltext_catalog 'catalogue_fulltext', 'stop'

- 16 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

XIII - Indexation d'une table


De nouveau, nous considrons que la table sur laquelle nous voulons effectuer ces commandes est bel et bien
signale comme indexe.
Indexation complete
Il est possible d'indexer toutes les lignes de la table en une commande. Celle-ci supprime tous les indexes et rindexe
entirement les valeurs.
Indexation complte
exec sp_fulltext_table catalogue_fulltext, 'start_full'

Indexation incrmentale
Contrairement l'indexation complte, cette commande permet d'indexer uniquement les lignes qui ont subies un
changement. Il faut pour cela qu'une colonne de type timestamp soit prsente dans la table indexer.
Indexation incrmentale
exec sp_fulltext_table catalogue_fulltext, 'start_incremental'

Arrt de l'indexation
Comme pour le catalogue, il est possible d'arrter l'indexation en cours.
Arrt de l'indexation
exec sp_fulltext_table catalogue_fulltext, 'stop'

Indexation incrmentale et tracking


Le tracking permet d'enregistrer les changements effectus sur la table. Cette enregistrement ne s'effectue pas sur
les colonnes de type image, ntext et text.
Cette commande effectue tout d'abord une indexation incrmentale avant de dmarrage l'enregistrement. Si il n'y a
pas de colonne de type timestamp, une indexation complte est effectue.
Indexation incrmentale et tracking
exec sp_fulltext_table 'catalogue_fulltext, 'start_change_tracking'

Arrt du tracking
La commande pour arrter le tracking est la suivante:
Propagation des changements enregistrs aux indexes
L'enregistrement des changements de valeurs n'effectue pas la mise jour des indexes de manire automatique. Il
est ncessaire de spcifier qu'il faut propager ces changements aux indexes. Ceci se fait l'aide de :
Propagation des changements enregistrs aux indexes
exec sp_fulltext_table 'catalogue_fulltext, 'update_index'

Propagation automatique des changements


Il est possible de spcifier que les changements de valeurs doivent tre rpercuts le plus rapidement possible dans
les indexes.
Ceci est utile si les nouvelles donnes doivent apparatre dans les rsultats d'une recherche rapidement aprs leur
mise jour.
Propagation automatique des changements
exec sp_fulltext_table 'catalogue_fulltext, 'start_background_updateindex'
- 17 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

Arrt de la propagation automatique des changements


Pour arrter cette propagation automatique
Arrt de la propagation automatique des changements
exec sp_fulltext_table 'catalogue_fulltext, 'stop_background_updateindex'

- 18 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

XIV - Conseils d'utilisation


Ces quelques conseils sont extraits de la documentation msdn ou sont bass sur des tests personnels.
Emplacement des fichiers
L'indexation full-text portant sur des tables comportant moins d'un million de lignes ne ncessite aucune optimisation
ou presque. Si le nombre de lignes est suprieur au million, il est ncessaire configurer Sql Server afin de favoriser
les performances entre/sortie vers les fichiers utiliss. Comme souvent, il est prfrable de mettre les fichiers sur
un disque physique distinct de celui utilis par Sql Server lui-mme.
Sous Windows 2000, le pagefile.sys doit tre 1,5 2 fois plus grand que la taille de la mmoire. De nouveau, ce
fichier doit se trouver sur un autre disque que ceux utiliss par Sql Server, l'environnement hte et le catalogue si
cela est possible.
Configuration machine
Bien entendu, la configuration machine a une trs grande importance. L'utilisation de multiples processeurs, d'un
maximum de mmoire vive, de diffrents disques et la mise en RAID permettent d'augmenter significativement les
performances.
Type d'indexation
Dans le cas d'une indexation sur un grand nombre de lignes, il est prfrable d'utiliser le mode " Change Tracking "
ou encore la population incrmentale des indexes en lieu et place de la population complte.
Selon la documentation msdn, la mise jour complte des indexes sur des tables comportant de 4 20 millions
de lignes de donnes peut prendre des heures, voire des jours. Pour 20 millions, une centaine d'heures peuvent
tre ncessaires.
Priodicit de l'indexation
La mise jour des indexes doit s'effectuer lors d'une priode de basse activit pour le serveur, c'est dire
gnralement la nuit. Il faut cependant faire attention que la nuit pour certains signifie le jour pour d'autres si
l'application est utilise dans diffrents pays.
Nombre de valeurs de retour
Dans le cas d'une recherche, ce qui est gnralement l'utilit de l'indexation full-text, il est rarement ncessaire de
retourner des milliers de lignes de rsultats l'utilisateur. La plupart des donnes ne lui seront d'aucune utilit, il est
ds lors bon de limiter le nombre de valeurs retournes lors de l'appel des procdures.
Par ailleurs, il est bon d'utiliser le mot cl " TOP ", qui limitera le nombre de lignes retournes la valeur fixe lors
de la requte, afin d'amliorer les performances.
De plus, il est ncessaire d'utiliser le mot cl " WHERE " aprs la jointure et non avant.
Approximativement, une recherche full-text partir du web qui s'effectue sur plusieurs millions de lignes peut prendre
de 20 30 secondes si l'on utilise CONTAINS et FREETEXT.
Recherche dans toutes les colonnes d'une table
Si une recherche doit s'effectuer sur toutes les colonnes d'une table, il est prfrable d'utiliser " * " au lieu de boucler
et d'effectuer la recherche sur chaque colonne de la table. Ceci permet de rduire le cot en temps.

- 19 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

XV - Procdures stockes personnelles permettant la recherche full-text


Table contenant les id
Vu la lenteur de la procdure sp_fulltext_columns (une moyenne de 9 secs tait ncessaire lors des diffrents
tests), une table supplmentaire est prsente au sein mme de la base. Cette table ne contient que des donnes
redondantes par rapport aux donnes stockes dans le catalogue d'indexation full-text. Elles sont cependant plus
simples d'utilisation puisqu'il s'agit d'une simple table relationnelle.
Elle contient comme informations les id des tables et des colonnes indexes comme on peut le voir dans la dfinition
de la table :
Table d'informations sur les colonnes indexes
CREATE TABLE fulltext_indexedcolumns
(
column_id INTEGER,
column_name SYSNAME,
table_id INTEGER,
table_name SYSNAME
);

Procdure de mise jour des indexes


La table est mise jour lors de l'appel de la procdure fulltext_generateIndex dcrite ci-dessous. Cette procdure
effectue par ailleurs la demande de mise jour du catalogue d'indexes. La dure d'excution de cette procdure est
d'environ 9 secondes tant donn qu'elle utilise sp_fulltext_columns. Il est donc prfrable de l'appeler de manire
asynchrone.
Procdure de mise jour des indexes
CREATE PROCEDURE fulltext_generateIndex
AS
DECLARE
@cursor CURSOR,
@unused_table_owner SYSNAME,
@fulltext_colid INTEGER,
@table_name SYSNAME,
@table_id INTEGER,
@fulltext_column_name SYSNAME,
@unused_fulltext_blobtp_colname SYSNAME,
@unused_fulltext_blobtp_colid INTEGER,
@unused_fulltext_language SYSNAME
BEGIN
-- Bind the fulltext_indexedColumns table
DELETE FROM fulltext_indexedcolumns;
EXEC sp_help_fulltext_columns_cursor @cursor OUTPUT
FETCH NEXT FROM @cursor
INTO @unused_table_owner, @table_id, @table_name, @fulltext_column_name, @fulltext_colid,
@unused_fulltext_blobtp_colname, @unused_fulltext_blobtp_colid, @unused_fulltext_language
WHILE (@@FETCH_STATUS = 0)
BEGIN
INSERT INTO fulltext_indexedcolumns (Column_Id, Column_Name, Table_Id, Table_Name)
VALUES (@fulltext_colid, @fulltext_column_name, @table_id, @table_name);
FETCH NEXT FROM @cursor
INTO @unused_table_owner, @table_id, @table_name, @fulltext_column_name, @fulltext_colid,
@unused_fulltext_blobtp_colname, @unused_fulltext_blobtp_colid, @unused_fulltext_language
END
CLOSE @cursor
DEALLOCATE @cursor
-- Start full indexing
exec sp_fulltext_catalog 'fulltext_msdnacademiebe', 'start_incremental'
END

Table d'informations sur les tables indexes

- 20 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

Le but de l'indexation full-text est, dans notre cas, d'effectuer des recherches. Ainsi, afin de recrer les liens vers
les diffrentes pages du site, une table contient diverses informations telles que " quelle est la colonne qui sert de
paramtre ? ", " quelle est la page vers laquelle le lien doit pointer ? ", En voici sa structure :
Table d'informations sur les tables indexes
CREATE TABLE fulltext_tables_infos
(
table_name SYSNAME,
rubric VARCHAR(25),
rubric_Link VARCHAR(25),
titleColumn VARCHAR(25),
titleLinkColumn VARCHAR(25),
descriptionColumn VARCHAR(25)
);

Procdure d'ajout d'une colonne dans la liste des colonnes indexes


Afin d'tre certain que les tables concernes par l'indexation aient t signales comme indexables avant de faire
l'ajout des colonnes, une procdure vrifie que la table est indexe avant d'indexer la colonne.
Il est ncessaire, pour effectuer l'indexation, que la table possde une cl prtendante au titre de cl primaire simple
comme nous l'avons dj vu. Le choix de cette cl unique doit se porter sur la cl la plus petite en taille. Dans le
meilleur des cas, une cl utilisant 4 bytes, c'est dire un integer, est optimale. Si la cl a une taille de plus de 100
bytes, il est fortement conseill de modifier celle-ci ou d'ajouter une autre. De plus, si la cl est plus grande que 450
bytes, l'indexation ne pourra pas se faire.
Procdure d'ajout d'une colonne dans la liste des colonnes indexes
CREATE PROCEDURE fulltext_addColumn
@table_name VARCHAR(50),
@column_name VARCHAR(50)
AS
DECLARE
@primaryKey_name VARCHAR(53)
BEGIN
IF OBJECTPROPERTY(OBJECT_ID(@table_name), 'TableFullTextCatalogId') = 0
BEGIN
SET @primaryKey_name = 'PK_' + @table_name;
exec sp_fulltext_table @table_name, 'create', 'fulltext_msdnacademiebe', @primaryKey_name
END
exec sp_fulltext_column @table_name, @column_name, 'add', 0x040c
END

Il ne reste plus, ds lors, appeler cette dernire procdure pour chaque colonne que l'on souhaite indexer.
Ajout des colonnes indexer : exemples
exec fulltext_addColumn 'AspF_Messages', 'Item';
exec fulltext_addColumn 'Links', 'LinkName';
exec fulltext_addColumn 'Links', 'Description';
--

Aprs avoir dfini les diffrentes colonnes indexer et il est possible d'effectuer des recherches deux niveaux.
Le premier niveau se site au niveau d'une table. Cette recherche, suivant les valeurs des diffrents paramtres
peut effectuer des oprations diffrentes. Il est ainsi possible de renvoyer directement les rsultats ou de les insrer
dans une table temporaire. Ce dernier cas est utilis si la recherche porte sur toutes les tables indexes, ce qui est
gnralement le cas.
De plus, suivant les critres passs la procdure, son comportement est diffrent. Soit elle fait appel
CONTAINSTABLE, soit FREETEXTTABLE. Si aucun mot cl particulier tel que " AND ", " OR ", c'est
FREETEXTTABLE qui est utilis.
Procdure de recherche au sein d'une table

- 21 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

Procdure de recherche au sein d'une table


CREATE PROCEDURE fulltext_search_table
@table_name VARCHAR(50),
@criterias NVARCHAR(4000),
@column_name VARCHAR(50) = NULL,
@useTempTable BIT = 0,
@largeScope BIT = 1,
@rowsToReturn INTEGER = -1
AS
BEGIN
DECLARE
@table_id INTEGER,
@unique_key_col_name SYSNAME,
@command NVARCHAR(4000),
-- Autres dclarations en VARCHAR(25)

-- Tests pour vrifier que tous les paramtres ont t passs correctement
SET @unique_key_col_name = Col_Name(@table_id, ObjectProperty(@table_id, 'TableFullTextKeyColumn'));
-- Vrification des mots cls dans les critres
-- Recuperation des noms de colonnes
SELECT @createCommand_title = titleColumn,
@createCommand_titleLink = titleLinkColumn,
@createCommand_titlePreLink = titlePreLinkText,
@createCommand_description = descriptionColumn,
@createCommand_rubricname = rubric
FROM fulltext_tables_infos
WHERE table_name = @table_name;
-- Test des valeurs retournes
SET @command = '';
IF @useTempTable = 1
BEGIN
SET @command = 'INSERT INTO #fulltext_results ';
END
-- SELECT
SET @command = @command + 'SELECT Extern_Table.' + @createCommand_title + ' AS Title, ';
SET @command = @command + '''' + @createCommand_titlePreLink + ''' + CAST(Extern_Table.' +
@createCommand_titleLink + ' AS VARCHAR(20)) AS TitleLink, ';
SET @command = @command + 'SUBSTRING(Extern_Table.' +
@createCommand_description + ', 1, 200) + '' (...)'' AS Description';
IF @useTempTable = 1
BEGIN
SET @command = @command + ', ''' + @createCommand_rubricname + ''', Key_Table.Rank ' ;
END
-- FROM
SET @command = @command + 'FROM ' + @table_name + ' AS Extern_Table INNER JOIN '
-- FREETEXT OU CONTAINS?
IF @largeScope = 1
BEGIN
SET @command = @command + 'FREETEXTTABLE';
END
ELSE
BEGIN
SET @command = @command + 'CONTAINSTABLE';
END
-- Parametres de l'appel
SET @command = @command + '(' + @table_name + ', ' + @column_name + ', ''';
-- Ajouter les criteres
SET @command = @command + @criterias + '''';
IF @rowsToReturn > -1
BEGIN
SET @command = @command + ', ' + CAST(@rowsToReturn AS VARCHAR(5));
END
SET @command = @command + ') AS Key_Table ON Extern_Table.' + @unique_key_col_name + ' = Key_Table.
[KEY]';
-- ORDER BY
SET @command = @command + ' ORDER BY Key_Table.Rank DESC';

- 22 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

Procdure de recherche au sein d'une table


EXEC (@command);
END

Procdure de recherche au sein de la base


CREATE PROCEDURE fulltext_search_allTables
@criterias NVARCHAR(4000),
@largeScope BIT = 1,
@rowsToReturn INTEGER = -1
AS
DECLARE
@table_id INTEGER,
@table_name SYSNAME,
@column_id INTEGER,
@column_name SYSNAME;
DECLARE curseur CURSOR FOR SELECT DISTINCT table_name FROM fulltext_indexedcolumns;
BEGIN
IF EXISTS(SELECT * FROM Information_Schema.tables WHERE Table_Name = '#fulltext_results')
DELETE FROM #fulltext_results;
ELSE
CREATE TABLE #fulltext_results (title VARCHAR(100), linktitle VARCHAR(100),
description VARCHAR(2000), rubric VARCHAR(100), rank INTEGER);
OPEN curseur
-- Vrification des mots cls dans les critres
FETCH NEXT FROM curseur
INTO @table_name
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC fulltext_search_table @table_name, @criterias, NULL, 1, @largeScope, @rowsToReturn
FETCH NEXT FROM curseur
INTO @table_name
END
CLOSE curseur
DEALLOCATE curseur
SELECT * FROM #fulltext_results ORDER BY rank DESC;
END

- 23 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

XVI - Questionnement full-text au travers de fichiers


Fichiers contenus dans la base de donnes
Pour indexer des fichiers en les stockant dans la base de donnes, il est ncessaire de les inclure dans des colonnes
de type " image ". Pour la recherche full-text, il sera cependant ncessaire de spcifier une autre colonne qui servira
indiquer quel type de document en stock pour chaque ligne. La recherche s'effectuera selon la manire prsente
prcdemment.
Fichiers contenus dans le systme de fichiers
Il est cependant possible d'effectuer le questionnement sur des fichiers contenus directement dans le systme de
fichiers classiques. On peut effectuer deux types de questionnement sur des fichiers : - Questionnement sur les
proprits (auteur, date de cration, sujet) - Questionnement full-text sur le contenu. Par exemple :
Exemple de recherche combinant questionnement sur les proprits et le full-text
SELECT Files.FileName, Files.Size
FROM OpenQuery(MyLinkedServer,
'SELECT FileName, Size
FROM SCOPE('' "c:\" '')
WHERE CONTAINS(''"SQL Server" NEAR() TEXT'')
AND FileName LIKE ''%.doc%'' ') > 0 AS Files

sp_addlinkedserver permet de crer un serveur li, c'est dire qui autorise les accs distribus. Ce serveur li est
utilis par OpenQuery comme on peut le voir dans le code prcdent.
OpenQuery permet d'utiliser une source de donnes. Il peut s'agir d'une base de donnes ou de fichiers traditionnels.
Il est important de noter que cette procdure n'accepte pas les variables en argument.

- 24 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

XVII - Amliorations dans Sql Server 2005 par rapport Sql Server 2000

On peut dsormais choisir les colonnes indexer dans une table ce qui n'tait pas le cas dans la version
2000;
Les colonnes de type XML peuvent tre prises en compte;
On peut dsormais choisir la langue utilise pour l'indexation (avec l'utilisation de type noise.langue, par
exemple, noise.fr);
Les commandes Save/Restore et Attach/Detach englobent aussi les catalogues d'indexation.

- 25 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

XVIII - Remarques
- Si, lors d'une recherche, les rsultats ne correspondent pas aux attentes, vrifier le contenu du fichier noise.langue.
Supprimez les mots considrs comme "noirs" alors qu'il s'agit de mot utilis frquemment dans certaines situations.
Ensuite, relancez l'indexation des donnes.
- Le catalogue fulltext dpend du systme de collation utilis. Ainsi, un catalogue cr sur une base de donnes
avec une collation sensible aux accents, sera lui mme sensible aux accents. Il est donc important de bien choisir
son systme de collation ds le dpart. Il n'est pas possible de configurer le catalogue fulltext pour utiliser un autre
collation.

- 26 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

Utilisation du full-text en Sql Server (2000 et 2005) par

XIX - Conclusion
Comme on a pu le voir tout au long de cet article, l'indexation fulltext est simple mettre en place. On notera tout
de mme que lors d'une recherche, ce systme n'est pas capable de "remarquer" lorsqu'il y a une erreur de frappe
(inversion de lettres) ou une erreur au niveau de l'orthographe. Pour cela, je vous renvoie vers l'article suivant:
http://sqlpro.developpez.com/cours/indextextuelle/
Merci SqlPro pour la relecture de l'article.

- 27 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2006 Danse Didier. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.