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

Znaki ucieczki w wyszukiwaniu pełnotekstowym programu SQL Server?

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:

  1. Twoje słowo z takim znakiem jest reprezentowane jako dwa (lub więcej) słowa w indeksie pełnotekstowym.
  2. 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj SQL z numeracją porządkową

  2. Tymczasowe buforowanie obiektów SQL Server

  3. EF 6 — Jak poprawnie wykonywać zapytania równoległe

  4. Różnica między odczytem zatwierdzonym a odczytem powtarzalnym

  5. Wskazówki dotyczące przenoszenia bazy danych SQL Server z jednego serwera na drugi — samouczek SQL autorstwa Rajana Singha