Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server contém função de texto completo que não retorna os resultados esperados


Em Fulltext, todos os caracteres não alfanuméricos são removidos dos índices e substituídos por espaços em branco .Então, em sua busca, já que você tinha "." na string, você está procurando por "website" e "net".

Você pode corrigir isso de 2 maneiras.

Você precisa ter uma tabela separada ou um campo separado que tenha os dados de texto completo, separados da tabela original onde você mantém os dados originais.

Na tabela de texto completo, você pode remover o ". " e armazene "websitenet ".

Nesse caso, você precisa remover todos os "." da string de pesquisa antes de fazer a consulta. Se você deseja consultar com ".", você precisa substituir "." com uma cadeia de caracteres -por exemplo "ponto".

Portanto, neste caso, você armazenaria "websitedotnet ".

Ao pesquisar desta vez, você substitui todos os "." com "ponto" na consulta.

OK agora seu caso com um novo campo onde armazene a coluna a ser pesquisada pelo FTS assim:
    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

então sua consulta:
declare @search_client nvarchar(100) = 'website'

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

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