14
我正在做一个MS SQL Server全文搜索查询。我需要转义特殊字符,以便搜索包含特殊字符的特定字词。有没有一个内置函数来转义全文搜索字符串?如果不是,你会怎么做?SQL Server全文搜索转义字符?
我正在做一个MS SQL Server全文搜索查询。我需要转义特殊字符,以便搜索包含特殊字符的特定字词。有没有一个内置函数来转义全文搜索字符串?如果不是,你会怎么做?SQL Server全文搜索转义字符?
坏消息:没有办法。好消息是:你不需要它(因为反正也无济于事)。
我在我的一个项目上遇到了类似的问题。我的理解是,同时建立全文索引,SQL Server将所有的特殊字符如文字分隔符,因此:
考虑我们与它相应的全文索引(这是跳过)如下表:
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,它告诉我们如何将全文搜索查询的引号转换为[隐含地]与上述算法对齐。