2009-06-15 10 views

Répondre

23

Mauvaise nouvelle: il n'y a aucun moyen. Bonne nouvelle: vous n'en avez pas besoin (cela ne va pas aider de toute façon).

J'ai fait face à un problème similaire sur l'un de mes projets. Je crois comprendre que tout en construisant index de texte intégral, SQL Server traite tous les caractères spéciaux comme délimiteurs et donc:

  1. Votre mot avec un tel caractère est représenté par deux (ou plus) mots index de texte intégral.
  2. Ces caractères sont supprimés et n'apparaissent pas dans un index.

Tenez compte, nous avons le tableau ci-dessous avec un index de texte intégral correspondant pour (ce qui est sauté):

CREATE TABLE [dbo].[ActicleTable] 
(
    [Id] int identity(1,1) not null primary key, 
    [ActicleBody] varchar(max) not null 
); 

Considérez plus tard, nous ajouter des lignes à la table:

INSERT INTO [ActicleTable] values ('digitally improvements folders') 
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)') 

Essayez une recherche:

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders') 

et

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold') 

Le premier groupe de conditions correspondra à la première ligne (et non à la seconde) tandis que le second groupe correspondra uniquement à la deuxième ligne.

Malheureusement, je ne pouvais pas trouver un lien vers MSDN (ou quelque chose) où un tel comportement est clairement indiqué. Mais j'ai trouvé un official article qui indique comment convertir les guillemets pour les requêtes de recherche en texte intégral, ce qui est [implicitement] aligné avec l'algorithme décrit ci-dessus.

Questions connexes