Zła wiadomość:nie ma mowy. Dobra wiadomość:nie potrzebujesz tego (ponieważ i tak nie pomoże).
Z podobnym problemem spotkałem się w jednym z moich projektów. Rozumiem, że podczas budowania indeksu pełnotekstowego SQL Server traktuje wszystkie znaki specjalne jako ograniczniki wyrazów, a zatem:
- Twoje słowo z takim znakiem jest reprezentowane jako dwa (lub więcej) słowa w indeksie pełnotekstowym.
- Te znaki są usuwane i nie pojawiają się w indeksie.
Rozważmy, że mamy poniższą tabelę z odpowiadającym jej indeksem pełnotekstowym (który jest pomijany):
CREATE TABLE [dbo].[ActicleTable]
(
[Id] int identity(1,1) not null primary key,
[ActicleBody] varchar(max) not null
);
Rozważmy później, dodamy wiersze do tabeli:
INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')
Spróbuj wyszukać:
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')
i
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')
Pierwsza grupa warunków będzie pasować do pierwszego rzędu (a nie do drugiego), podczas gdy druga grupa będzie pasować tylko do drugiego rzędu.
Niestety nie mogłem znaleźć linku do MSDN (lub czegoś takiego), gdzie takie zachowanie jest wyraźnie określone. Ale znalazłem oficjalny artykuł, który mówi, jak konwertować cudzysłowy dla zapytań wyszukiwania pełnotekstowego, który jest [domyślnie] zgodny z wyżej opisanym algorytmem.