Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server contiene la funzione full-text che non restituisce i risultati previsti

In Fulltext, tutti i caratteri non alfanumerici vengono rimossi dagli indici e sostituiti da spazi vuoti .Quindi nella tua ricerca, dato che avevi "." nella stringa stai cercando "sito web" e "rete".

Puoi risolvere questo problema in 2 modi.

Devi avere una tabella separata o un campo separato che contenga i dati fulltext, separati dalla tabella originale in cui mantieni i dati originali.

Nella tabella fulltext puoi rimuovere ". " e archivia "websitenet ".

In tal caso, è necessario rimuovere tutti i "." dalla stringa di ricerca prima di eseguire la query. Se vuoi interrogare con ".", devi sostituire "." con una stringa di caratteri, ad esempio "punto".

Quindi in questo caso memorizzeresti "websitedotnet ".

Quando cerchi questa volta, sostituisci tutti i "." con "punto" nella query.

OK ora il tuo caso con un nuovo campo in cui memorizzare la colonna da cercare per FTS quindi:

    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

quindi la tua domanda:

declare @search_client nvarchar(100) = 'website'

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

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