Recherche SQL Server Fulltext ne trouvant pas mes lignes

J'ai une table SQL Server et j'essaie de donner un sens à la search fulltext 🙂

J'ai mis en place un catalogue fulltext et un index fulltext sur une table Entry , qui contient entre autres une colonne VARCHAR(20) appelée VPN-ID .

Il y a environ 200 000 lignes dans cette table et la colonne VPN-ID contient des valeurs telles que:

 VPN-000-359-90 VPN-000-363-85 VPN-000-362-07 VPN-000-362-91 VPN-000-355-55 VPN-000-368-36 VPN-000-356-90 

Maintenant, j'essaie de find des lignes dans cette table avec une search en text intégral.

Quand je fais

 SELECT (list of columns) FROM dbo.Entry WHERE CONTAINS(*, 'VPN-000-362-07') 

tout va bien et dandy et mes rangs sont returnnés.

Quand je commence à chercher avec un caractère générique comme ceci:

 SELECT (list of columns) FROM dbo.Entry WHERE CONTAINS(*, 'VPN-000-362-%') 

Je reçois des résultats et tout semble bien.

TOUTEFOIS: quand je cherche comme ceci:

 SELECT (list of columns) FROM dbo.Entry WHERE CONTAINS(*, 'VPN-000-36%') 

soudain, je n'obtiens aucun résultat … même s'il y a clairement des lignes qui correspondent à ce critère de search …

Des idées pourquoi ?? Quelles autres «sursockets» la search fulltext pourrait-elle me réserver? 🙂

Mise à jour: pour créer mon catalogue de text intégral, j'ai utilisé:

 CREATE FULLTEXT CATALOG MyCatalog WITH ACCENT_SENSITIVITY = OFF 

et pour créer l'index de text intégral sur ma table, j'ai utilisé

 CREATE FULLTEXT INDEX ON dbo.Entry(list of columns) KEY INDEX PK_Entry 

J'ai essayé d'éviter autant que possible les options "bizarres".

Mise à jour # 2: après un peu plus d'enquête, il semble que la search SQL Server Fulltext interprète en quelque sorte mes tirets à l'intérieur des strings comme des séparateurs ….

Alors que cette requête ne returnne rien:

 SELECT (list of columns) FROM dbo.Entry WHERE CONTAINS(*, '"VPN-000-362*"') 

celui-ci fait (fractionnement du terme de search sur les tirets):

 SELECT (list of columns) FROM dbo.Entry WHERE CONTAINS(*, ' "VPN" AND "000" AND "362*"') 

OK – semble un peu étrange qu'un tiret semble entraîner un fractionnement qui en quelque sorte ne fonctionne pas …..

Quelle Language for Word Breaker utilisez-vous? Avez-vous essayé Neutral ?

entrez la description de l'image ici

MODIFIER:
De plus, vous devez utiliser WHERE CONTAINS([Column], '"text*"') . Voir MSDN pour plus d'informations sur les searchs de préfixes :

C. Utilisation de CONTAINS avec

L'exemple suivant renvoie tous les noms de produits avec au less un mot commençant par la string de préfixe dans la colonne Nom.

 USE AdventureWorks2008R2; GO SELECT Name FROM Production.Product WHERE CONTAINS(Name, ' "Chain*" '); GO 

btw … question similaire ici et ici

Je me demandais juste, mais pourquoi ne faites-vous pas ceci:

 SELECT (list of columns) FROM dbo.Entry WHERE [VPN-ID] LIKE 'VPN-000-36%' 

Il me semble que la search de text intégral n'est pas le bon outil pour le travail. Utilisez simplement un index normal sur cette colonne.