sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server innehåller fulltextfunktion som inte ger förväntade resultat

I fulltext tas alla icke-alfanumeriska tecken bort i indexen och ersätts med tomma tecken .Så i din sökning, eftersom du hade "." i strängen söker du efter "webbplats" och "nät".

Du kan fixa detta på två sätt.

Du måste ha en separat tabell eller ett separat fält som har fulltextdata, separerade från den ursprungliga tabellen där du behåller originaldata.

I fulltexttabellen kan du ta bort ". " och lagra "webbplatsnät ".

I så fall måste du ta bort alla "." från söksträngen innan du gör frågan. Om du vill fråga med ".", måste du ersätta "." med en teckensträng -till exempel "punkt".

Så i det här fallet skulle du lagra "websitedotnet ".

När du söker den här gången ersätter du alla "." med "prick" i frågan.

OK nu ditt fall med ett nytt fält där lagra kolumnen som ska sökas av FTS så:

    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

sedan din fråga:

declare @search_client nvarchar(100) = 'website'

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

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


  1. SQL Server 2008 - olika sorteringsordningar på VARCHAR vs NVARCHAR värden

  2. Använda kolumnalias i samma SELECT-sats

  3. Logga in varningar i en tabell

  4. Skapa blob (Oracle)-returer Metoden är inte implementerad av JDBC-drivrutinen (Jboss eap 5.1)