Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server zawiera funkcję pełnego tekstu, która nie zwraca oczekiwanych wyników

W pełnym tekście wszystkie znaki niealfanumeryczne są usuwane z indeksów i zastępowane przez spacje .Więc w poszukiwaniach, odkąd miałeś "." w ciągu szukasz „witryny” i „sieci”.

Możesz to naprawić na 2 sposoby.

Musisz mieć oddzielną tabelę lub oddzielne pole, które zawiera dane pełnotekstowe, oddzielone od oryginalnej tabeli, w której przechowujesz oryginalne dane.

W tabeli pełnego tekstu możesz usunąć „. ” i sklep „websitenet ".

W takim przypadku musisz usunąć wszystkie „.” z ciągu wyszukiwania przed wykonaniem zapytania. Jeśli chcesz zapytać z „.”, musisz zastąpić „.” z ciągiem znaków -na przykład "kropka".

W takim przypadku należy przechowywać „websitedotnet ".

Podczas wyszukiwania tym razem zastępujesz wszystkie „.” z „kropką” w zapytaniu.

OK, teraz twoja sprawa z nowym polem, w którym przechowujesz kolumnę do przeszukania przez FTS, więc:

    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

następnie Twoje zapytanie:

declare @search_client nvarchar(100) = 'website'

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

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Napraw komunikat 8117 „Operand typ danych varchar jest nieprawidłowy dla operatora sumy” w SQL Server

  2. Tabela SQL Server do json

  3. połączenia kodeignitera i odbc

  4. Jak sprawić, by SQL Server znalazł login pasujący do podanej nazwy?

  5. Zapytanie SQL do pobrania danych z ostatnich 3 miesięcy