Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server enthält eine Volltextfunktion, die nicht die erwarteten Ergebnisse zurückgibt

Im Volltext werden alle nicht alphanumerischen Zeichen in den Indizes entfernt und durch Leerzeichen ersetzt .So in Ihrer Suche, da Sie "." in der Zeichenfolge suchen Sie nach "website" und "net".

Sie können dies auf zwei Arten beheben.

Sie benötigen eine separate Tabelle oder ein separates Feld mit den Volltextdaten, getrennt von der Originaltabelle, in der Sie die Originaldaten aufbewahren.

In der Volltexttabelle können Sie das „. entfernen " und speichern Sie "websitenet ".

In diesem Fall müssen Sie alle "." aus der Suchzeichenfolge, bevor Sie die Abfrage durchführen. Wenn Sie mit „.“ abfragen möchten, müssen Sie „.“ ersetzen. mit einer Zeichenfolge - zum Beispiel "Punkt".

In diesem Fall würden Sie also „websitedotnet speichern ".

Wenn Sie dieses Mal suchen, ersetzen Sie alle "." mit "Punkt" in der Abfrage.

OK, jetzt Ihr Fall mit einem neuen Feld, in dem die Spalte gespeichert wird, die von FTS gesucht werden soll, also:

    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

dann Ihre Abfrage:

declare @search_client nvarchar(100) = 'website'

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

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