Voici un exemple de tableau avec une search en text intégral sur le champ FTSdata
:
CREATE TABLE dbo.tTest (Id INT, FTSdata VARCHAR(100)); INSERT INTO dbo.tTest (Id, FTSdata) VALUES (1, 'foo WordA'), (2, 'foo WordAaabbb'), (3, 'WordB bar'), (4, 'WordBbbaaa bar');
Je voudrais find tous ces loggings peu importe si les users ont tapé "WordA" ou "WordB".
Mon thesaurus ressemble à ceci:
<expansion> <sub>WordA</sub> <sub>WordB</sub> </expansion>
J'ai besoin de quelque chose comme
SELECT * FROM dbo.tTest WHERE CONTAINS(FTSdata, 'FORMSOF (THESAURUS, "WordA*")');
Malheureusement, l'astérisque n'est pas pris en charge dans le prédicat FORMSOF.
C'est vrai que vous ne pouvez pas utiliser *
avec THESAURUS mais vous pouvez faire quelque chose comme ça.
Question
SELECT FTSdata FROM dbo.tTest2 WHERE CONTAINS(FTSdata, 'FORMSOF (THESAURUS, Word) OR "Word*"')
Cela renverra tout thesaurus que vous aurez défini pour le mot "Word" ainsi que tous les mots commençant par "Word".
L'set reuslt que je récupère en utilisant cette requête est le suivant:
Jeu de résultats
FTSdata foo WordA foo WordAaabbb WordB bar WordBbbaaa bar
FTS XML FILE
<expansion> <sub>Word</sub> <sub>WordA</sub> <sub>WordB</sub> </expansion>