Je reçois une erreur de suivi dans ma base de données SQL Server 2008 R2:
Impossible d'utiliser un prédicat
CONTAINS
ouFREETEXT
sur la vue indexée ou table 'tblArmy' car il n'est pas indexé en texte intégral.
Assurez-vous que la fonctionnalité de recherche en texte intégral est installée.
Créer un catalogue de recherche en texte intégral.
use AdventureWorks
create fulltext catalog FullTextCatalog as default
select *
from sys.fulltext_catalogs
Créer un index de recherche en texte intégral.
create fulltext index on Production.ProductDescription(Description)
key index PK_ProductDescription_ProductDescriptionID
Avant de créer l'index, assurez-vous que:
- vous ne disposez pas déjà d'un index de recherche en texte intégral sur la table, car un seul index de recherche en texte intégral est autorisé sur une table
- un index unique existe sur la table. L'index doit être basé sur une colonne à clé unique, qui n'autorise pas NULL.
- le catalogue de texte intégral existe. Vous devez spécifier explicitement le nom du catalogue de texte intégral s'il n'y a pas de catalogue de texte intégral par défaut.
Vous pouvez effectuer les étapes 2 et 3 dans SQL Sever Management Studio. Dans l'explorateur d'objets, cliquez avec le bouton droit sur une table, sélectionnez Full-Text index
élément de menu puis Define Full-Text Index...
élément de sous-menu. L'assistant d'indexation de texte intégral vous guidera tout au long du processus. Il créera également un catalogue de recherche en texte intégral si vous n'en avez pas encore.
Vous pouvez trouver plus d’informations sur MSDN
Solution de contournement pour CONTAINS
: si vous ne souhaitez pas créer un index en texte intégral sur la colonne et que les performances ne font pas partie de vos priorités, vous pouvez utiliser l'instruction LIKE
qui n'est pas nécessaire. toute configuration préalable:
Exemple: rechercher tous les produits contenant la lettre Q:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Vous devez définir Full-Text-Index
sur toutes les tables de la base de données sur lesquelles vous devez utiliser une requête avec CONTAINS
, ce qui prendra parfois.
Au lieu de cela, vous pouvez utiliser le LIKE
qui vous donnera des résultats instantanés sans avoir à ajuster les paramètres des tables.
Exemple:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
Le même résultat obtenu avec CONTAINS
peut être obtenu avec LIKE
.
Vous devrez peut-être activer la table pour l'indexation de texte intégral .
Il existe une solution supplémentaire pour définir la colonne Full text sur true.
Ces solutions par exemple n'ont pas fonctionné pour moi
ALTER TABLE news ADD FULLTEXT(headline, story);
Ma solution.
PROCHAINES ÉTAPES
Rafraîchir
Version de mssql 2014
vous devez ajouter un index de texte intégral sur des champs spécifiques que vous souhaitez rechercher.
ALTER TABLE news ADD FULLTEXT(headline, story);
où "news" est votre table et les champs "headline, story" que vous ne pourrez pas activer pour la recherche en texte intégral
Select * from table
where CONTAINS([Column], '"A00*"')
agira comme% identique à
where [Column] Like 'A00%'