我正在进行 MS SQL Server 全文搜索查询。我需要转义特殊字符,以便在包含特殊字符的特定术语上进行搜索。是否有内置函数可以转义全文搜索字符串?如果没有,您将如何处理?
我正在进行 MS 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')
并且
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')
第一组条件将匹配第一行(而不是第二行),而第二组条件仅匹配第二行。
不幸的是,我无法找到指向 MSDN(或其他)中明确说明此行为的链接。但我找到了一篇官方文章,介绍了如何为全文搜索查询转换引号,这与上述描述的算法[隐含地]相符。