Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server contient une fonction de texte intégral ne renvoyant pas les résultats attendus

Dans Fulltext, tous les caractères non alphanumériques sont supprimés des index et remplacés par des blancs .Donc dans votre recherche, puisque vous aviez "." dans la chaîne, vous recherchez "site Web" et "net".

Vous pouvez résoudre ce problème de 2 manières.

Vous devez disposer d'un tableau séparé ou d'un champ séparé contenant les données de texte intégral, séparé du tableau d'origine dans lequel vous conservez les données d'origine.

Dans le tableau de texte intégral, vous pouvez supprimer le ". " et magasin "websitenet ".

Dans ce cas, vous devez supprimer tous les "." à partir de la chaîne de recherche avant de faire la requête. Si vous souhaitez interroger avec ".", vous devez remplacer "." avec une chaîne de caractères -par exemple "point".

Donc, dans ce cas, vous stockeriez "websitedotnet ".

Lorsque vous recherchez cette fois, vous remplacez tous les "." avec "point" dans la requête.

OK maintenant votre cas avec un nouveau champ où stocker la colonne à rechercher par FTS donc :

    ID      DESCRIPTION               DESCFTS
    -----------------------------------------------------
    1   this is a website.        this is a websitedot
    2   a website exists.         a website existsdot
    3   go to mywebsite.net       go to mywebsitedotnet
    4   go to mywebsite.net.      go to mywebsitedotnetdot

puis votre requête :

declare @search_client nvarchar(100) = 'website'

set @search_client = replace(@search_client, '.', 'dot')

select * from dbo.temp where contains ((DESCFTS), @search_client)