sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server Full Text Search Escape Characters?

Dårlige nyheder:der er ingen måde. Gode ​​nyheder:du har ikke brug for det (da det alligevel ikke hjælper).

Jeg har stået over for lignende problem på et af mine projekter. Min forståelse er, at mens SQL Server opbygger fuldtekstindeks, behandler alle specialtegn som ordafgrænsere og derfor:

  1. Dit ord med et sådant tegn er repræsenteret som to (eller flere) ord i fuldtekstindekset.
  2. Disse tegn er fjernet og vises ikke i et indeks.

Tænk på, at vi har følgende tabel med et tilsvarende fuldtekstindeks for den (som springes over):

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

Overvej senere, at vi tilføjer rækker til tabellen:

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

Prøv at søge:

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

og

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

Første gruppe af betingelser vil matche første række (og ikke anden), mens den anden gruppe kun vil matche anden række.

Desværre kunne jeg ikke finde et link til MSDN (eller noget), hvor sådan adfærd er tydeligt angivet. Men jeg har fundet en officiel artikel, der fortæller, hvordan man konverterer anførselstegn til fuldtekstsøgeforespørgsler, som er [implicit] tilpasset den ovenfor beskrevne algoritme.




  1. Sådan bruger du RANK() i SQL Server

  2. CURRENT_TIMESTAMP Eksempler i SQL Server (T-SQL)

  3. WSJDBCConnection ombryder ikke objekter af typen Oracle jdbc Connection

  4. Forespørgselskolonner navne fra en tabel fra en anden bruger