3 votes

Opérateur NOT de SQL Server pour la recherche en texte intégral

Je souhaite effectuer une recherche dans mon index plein texte avec l'opérateur NOT.

SELECT * FROM CONTAINSTABLE(MY_TABLE, *, 'NOT name'),

L'exception suivante :

Msg 7630, Level 15, State 3, Line 1
Syntax error near 'name' in the full-text search condition 'NOT name'.

Quel est le problème ? Comment effectuer une recherche dans mon index plein texte avec sólo Pas d'opérateur ?

Remerciements

3voto

NG. Points 1564

Au lieu de not, vous pouvez utiliser not contains :

SELECT * FROM MY_TABLE
where not contains( *, 'name')

Pour référence :

http://blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/

1voto

Ishikawa Points 115

Je suis un nouveau venu dans le domaine de la recherche plein texte, mais d'après l'article la documentation :

NOT ne peut apparaître qu'après AND, comme dans AND NOT. L'opérateur OR NOT est n'est pas autorisé. NOT ne peut être spécifié avant le premier terme .

Donc, dans votre cas, CONTAINSTABLE(MY_TABLE, *, 'NOT name') est considéré comme non valide. La seule façon que j'ai trouvée d'utiliser le NOT avec CONTAINSTABLE est le suivant :

SELECT * 
FROM CONTAINSTABLE({table_name}, *, N'{another_condition} AND NOT name')

La syntaxe proposée par @NG. fonctionne bien lorsque vous n'avez pas besoin de RANK mais dès que vous le souhaitez, il apparaît que vous devez ajouter une autre condition (factice) avant la condition NOT (ce qui serait assez désordonné... n'utilisez pas de conditions factices si vous pouvez l'éviter).

NOTE : A mon avis, le concept de n'avoir qu'un NOT à l'intérieur d'un CONTAINSTABLE n'a pas vraiment de sens lorsque l'objectif est d'obtenir des résultats classés. En effet, si cela était autorisé, tous les résultats correspondants partageraient la même valeur de classement (puisqu'ils ne contiendraient pas les éléments exclus). Les RANK deviendrait une information non pertinente et une simple CONTAINS pourrait être utilisé à la place CONTAINSTABLE (cf. @NG. réponse).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X