2009-06-15 155 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,它告诉我们如何将全文搜索查询的引号转换为[隐含地]与上述算法对齐。