2009-06-15 119 views
14

我正在做一個MS SQL Server全文搜索查詢。我需要轉義特殊字符,以便搜索包含特殊字符的特定字詞。有沒有一個內置函數來轉義全文搜索字符串?如果不是,你會怎麼做?SQL Server全文搜索轉義字符?

回答

23

壞消息:沒有辦法。好消息是:你不需要它(因爲反正也無濟於事)。

我在我的一個項目上遇到了類似的問題。我的理解是,同時建立全文索引,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') 

and

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

第一組條件將匹配第一行(而不是第二條),而第二組僅匹配第二行。

不幸的是,我找不到MSDN(或其他)的鏈接,其中明確指出了這種行爲。但是我發現了一個official article,它告訴我們如何將全文搜索查詢的引號轉換爲[隱含地]與上述算法對齊。