problème de requête - FREETEXTTABLE (SQL serveur)

problème de requête - FREETEXTTABLE (SQL serveur) - SQL/NoSQL - Programmation

Marsh Posté le 23-07-2008 à 18:44:08    

hello
 
voila ma requête:
 

Code :
  1. SELECT DISTINCT itemTitle_ContentHead, Path_path, KEY_TBL.RANK, name_page, id_place
  2. FROM zone INNER JOIN directory ON id_zone = fkzone_directory
  3. RIGHT OUTER JOIN theme INNER JOIN themeplace ON id_theme = fktheme_themeplace
  4. RIGHT OUTER JOIN page INNER JOIN ContentHead ON id_page = FkPage_ContentHead
  5. INNER JOIN path ON fkPath_page = Id_path
  6. INNER JOIN place ON id_page = fkpage_place ON fkplace_themeplace = id_place
  7. ON (id_directory = fkdirectory_place AND status_directory = 10)
  8. LEFT OUTER JOIN placeType ON fkplaceType_place = id_placeType
  9. INNER JOIN FREETEXTTABLE (ContentHead, *, 'Ajaccio') AS KEY_TBL
  10. ON id_contentHead = KEY_TBL.[KEY]
  11. WHERE ((permanent_ContentHead = 1 OR (DateBegin_Page <= '20080723' AND DateEnd_Page >= '20080723'))
  12. AND (status_page = 10 AND fkDraft_page IS NOT NULL)) AND (language_ContentHead = 'FR')
  13. AND id_placeType = 1
  14. ORDER BY KEY_TBL.RANK DESC, itemTitle_ContentHead ASC ;


 
lorsque je l'execute dans SQL Server management studio , j'ai ce message d'erreur:

Code :
  1. Msg 7601, Niveau 16, État 2, Ligne 1
  2. Impossible d'utiliser les prédicats CONTAINS ou FREETEXT sur table 'ContentHead' parce qu'il n'y a pas d'index de texte intégral.


 
dans la table ContentHead, il y a dans champs de type Int, varchar(800), char(2), bit(1) et des clés étrangères.
qu'est ce que je dois faire dans la table ContentHead pour que la requête fonctionne?
merci

Reply

Marsh Posté le 23-07-2008 à 18:44:08   

Reply

Marsh Posté le 24-07-2008 à 13:15:33    

1/ Virer le "*" dans ton FREETEXTTABLE, puisque tu n'as qu'un seul champ indexable par free text.
2/ Créer un index de texte intégral sur le champ varchar(800)
 
(et accessoirement, lire la doc pour savoir ce que c'est qu'un index de texte intégral)

Message cité 1 fois
Message édité par MagicBuzz le 24-07-2008 à 13:15:55
Reply

Marsh Posté le 24-07-2008 à 14:44:21    

MagicBuzz a écrit :

1/ Virer le "*" dans ton FREETEXTTABLE, puisque tu n'as qu'un seul champ indexable par free text.
2/ Créer un index de texte intégral sur le champ varchar(800)
 
(et accessoirement, lire la doc pour savoir ce que c'est qu'un index de texte intégral)


 
 
le problème c'est que je dois faire la recherche dans plusieurs champs de la table ContentHead   :sarcastic:

Reply

Marsh Posté le 24-07-2008 à 16:21:15    

Ben si dans ContentHead t'as un varchar, un char(2), un int et un bit... Excuse, mais y'a que dans le varchar que tu peux faire des recherches fulltext...

Reply

Marsh Posté le 25-07-2008 à 14:52:30    

ya 6 champs de type varchar dans la table. en utilisant le mot clé FREETEXTTABLE ce n'est donc pas possible de faire une recherche dans tous les champs de type varchar si je comprend bien?

Reply

Marsh Posté le 25-07-2008 à 15:27:10    

ben donc tu crée un index full texte qui porte sur ces 6 champs, et effectivement tu gardes ton *
 
c'était pas clair comme tu avais écrit

Reply

Marsh Posté le 25-07-2008 à 16:41:10    

ok merci pour les infos, je vais tester ça ^^
SQL et moi ça fait 2 c'est pour ça que c'est pas claire

Reply

Marsh Posté le 25-07-2008 à 18:55:07    

ben surtout que les index de texte intégral sont un ajout qui n'a rien à voir le SQL en lui-même. ça ne respecte aucune règle habituelle, que ce soit d'un point de vue fonctionnement que d'un point de vue syntaxe ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed