sql >> Databáze >  >> RDS >> Sqlserver

SQL Server Fulltextové vyhledávání Únikové znaky?

Špatná zpráva:neexistuje žádný způsob. Dobrá zpráva:nepotřebujete to (protože to stejně nepomůže).

Na jednom ze svých projektů jsem čelil podobnému problému. Chápu to tak, že při vytváření fulltextového indexu SQL Server zachází se všemi speciálními znaky jako s oddělovači slov, a proto:

  1. Vaše slovo s takovým znakem je reprezentováno jako dvě (nebo více) slova ve fulltextovém rejstříku.
  2. Tyto znaky jsou odstraněny a nezobrazují se v indexu.

Uvažujme, že máme následující tabulku s odpovídajícím fulltextovým indexem (který je přeskočen):

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

Zvažte později, že do tabulky přidáme řádky:

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

Zkuste hledat:

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

a

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

První skupina podmínek bude odpovídat prvnímu řádku (a ne druhému), zatímco druhá skupina bude odpovídat pouze druhému řádku.

Bohužel jsem nenašel odkaz na MSDN (nebo tak něco), kde je takové chování jasně uvedeno. Ale našel jsem oficiální článek, který říká, jak převést uvozovky pro fulltextové vyhledávací dotazy, který je [implicitně] v souladu s výše popsaným algoritmem.




  1. MySQL 1062 – Duplicitní záznam „0“ pro klíč „PRIMARY“

  2. Přidejte cizí klíč do existující tabulky v SQLite

  3. 5 bezpečnostních výhod cloudových řešení pro monitorování databází

  4. Oracle vložit do tabulky2 a poté odstranit z tabulky1, výjimka, pokud selže