2010-09-29 2 views
3

J'utilise CONTAINSTABLE pour rechercher deux colonnes de tableau. Une fois que la recherche contient de petits mots comme «le» pour «a», la recherche ne renvoie aucun résultat même lorsqu'ils sont réellement présents dans la colonne.Requête CONTAINSTABLE ne reconnaissant pas les petits mots

Exemple rapide. La colonne recherchée contient le texte. « Le système doit être mis à jour »

suivant retourne SQL 0 lignes

SELECT  * FROM Incident WHERE (TicketNumber IN (
SELECT TicketNumber FROM   [Action] FT_TBL INNER JOIN 
CONTAINSTABLE(Action, Text, '"system" AND "needs" AND "to" AND "upgraded" AND NOT "Search Summary"') KEY_TBL ON FT_TBL.ID = KEY_TBL.[KEY] 
UNION 
SELECT TicketNumber FROM [Incident] FT_TBL INNER JOIN 
CONTAINSTABLE(Incident, Subject, '"system" AND "needs" AND "to" AND "upgraded"') AS KEY_TBL ON FT_TBL.TicketNumber = KEY_TBL.[KEY])) 

Une fois « à » est omis, il fonctionne très bien:

SELECT  * FROM Incident WHERE (TicketNumber IN (
SELECT TicketNumber FROM   [Action] FT_TBL INNER JOIN 
CONTAINSTABLE(Action, Text, '"system" AND "needs" AND "upgraded" AND NOT "Search Summary"') KEY_TBL ON FT_TBL.ID = KEY_TBL.[KEY] 
UNION 
SELECT TicketNumber FROM [Incident] FT_TBL INNER JOIN 
CONTAINSTABLE(Incident, Subject, '"system" AND "needs" AND "upgraded"') AS KEY_TBL ON FT_TBL.TicketNumber = KEY_TBL.[KEY])) 

Comment peut CONTAINSTABLE être utilisé avec ces petits mots, ou devraient-ils être complètement exclus? Si ces mots plus petits sont significatifs dans la recherche, comment peuvent-ils être inclus dans la recherche?

+0

Quelle version de SQL Server? –

+0

https://technet.microsoft.com/en-us/library/ms187914(v=sql.110).aspx – Jodrell

Répondre

1

Il ne s'agit pas de «petits mots», ce sont des mots communs qui se trouvent sur la liste d'arrêt. Ils sont ignorés.

Voir Stopwords and Stoplists sur BOL.

+0

Merci. J'ai eu une petite idée que c'était le cas, je cherchais des mots interdits "CONTAINSTABLE" ainsi que des "mots bloqués". Merci pour l'info. – user48408

1

Veuillez voir the end of my answer pour créer et activer une liste d'arrêt de texte intégral personnalisée à partir de la liste vide. J'ai vérifié et vide une requête fonctionne avec "à", "être", "le", "pour", etc.

Mise à jour:

SQL Server 2005 devrait avoir MSSQL \ FTData \ noiseENG.txt .
Je recommanderais d'afficher les réponses à question "Noise Words in Sql Server 2005 Full Text Search"

+0

Dans SSMS 2005, il n'existe pas de noeud "Liste d'arrêt de texte intégral". On dirait que c'est une nouvelle édition en 08. On peut finir par mettre à jour vers 2008 quand même, auquel cas je vais essayer ça. Merci – user48408

+0

Plz voir ma mise à jour –

Questions connexes