sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server Full Text Search Escape Characters?

Dåliga nyheter:det går inte. Goda nyheter:du behöver det inte (eftersom det ändå inte hjälper).

Jag har stött på liknande problem i ett av mina projekt. Jag förstår att när jag bygger ett fulltextindex, behandlar SQL Server alla specialtecken som ordavgränsare och därför:

  1. Ditt ord med ett sådant tecken representeras som två (eller flera) ord i fulltextindex.
  2. Dessa tecken är bortskalade och visas inte i ett index.

Tänk att vi har följande tabell med ett motsvarande fulltextindex för den (som hoppas över):

CREATE TABLE [dbo].[ActicleTable] 
(
  [Id] int identity(1,1) not null primary key,
  [ActicleBody] varchar(max) not null
);

Överväg att vi senare lägger till rader i tabellen:

INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')

Försök att söka:

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')

och

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')

Den första gruppen av villkor kommer att matcha första raden (och inte den andra) medan den andra gruppen endast matchar andra raden.

Tyvärr kunde jag inte hitta en länk till MSDN (eller något) där sådant beteende tydligt framgår. Men jag har hittat en officiell artikel som berättar hur man konverterar citattecken för fulltextsökfrågor, som är [implicit] anpassad till den ovan beskrivna algoritmen.




  1. Hantering av tidszon i webbapplikation

  2. JDBCTemplate set kapslade POJO med BeanPropertyRowMapper

  3. PHP mysql infoga datumformat

  4. pip-installationen misslyckas med /usr/bin/clang:Ingen sådan fil eller katalog