sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server contiene una función de texto completo que no devuelve los resultados esperados

En Texto completo, todos los caracteres no alfanuméricos se eliminan de los índices y se reemplazan por espacios en blanco .Así que en tu búsqueda, ya que tenías "." en la cadena, está buscando "sitio web" y "red".

Puedes arreglar esto de 2 maneras.

Debe tener una tabla separada o un campo separado que tenga los datos de texto completo, separados de la tabla original donde conserva los datos originales.

En la tabla de texto completo, puede eliminar ". " y almacenar "websitenet ".

En ese caso, debe eliminar todos los "." de la cadena de búsqueda antes de hacer la consulta. Si desea consultar con ".", debe reemplazar "." con una cadena de caracteres, por ejemplo "punto".

Entonces, en este caso, almacenaría "websitedotnet ".

Cuando busca esta vez, reemplaza todos los "." con "punto" en la consulta.

Bien, ahora su caso con un nuevo campo donde almacenar la columna para ser buscada por FTS así que:

    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

entonces su consulta:

declare @search_client nvarchar(100) = 'website'

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

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