Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Избягали символи за търсене в пълен текст на SQL Server?

Лоша новина:няма начин. Добра новина:нямате нужда от нея (тъй като така или иначе няма да помогне).

Сблъсквал съм се с подобен проблем в един от моите проекти. Моето разбиране е, че докато изгражда пълнотекстов индекс, SQL Server третира всички специални знаци като разделители на думи и следователно:

  1. Вашата дума с такъв знак е представена като две (или повече) думи в индекс на пълен текст.
  2. Тези знак(и) са премахнати и не се показват в индекс.

Помислете, че имаме следната таблица със съответен индекс на пълен текст за нея (който е пропуснат):

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

Помислете по-късно, че добавяме редове към таблицата:

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

Опитайте да търсите:

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

и

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

Първата група условия ще съответства на първия ред (а не на втория), докато втората група ще съответства само на втория ред.

За съжаление не можах да намеря връзка към MSDN (или нещо подобно), където подобно поведение е ясно посочено. Но намерих официална статия, която разказва как да конвертирате кавички за заявки за търсене в пълен текст, което е [имплицитно] приведено в съответствие с описания по-горе алгоритъм.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Текстът, ntext и графичните данни> типовете не могат да се сравняват или сортират, освен когато се използва оператор IS NULL или LIKE>

  2. Създаване на тригери за одит в SQL Server

  3. Как мога да съкратя дата и час в SQL Server?

  4. Изпробвайте тези най-добри практики за наблюдение на база данни на MySQL

  5. Автоматично изтриване на забравени транзакции в MS SQL Server