SQL Server全文本搜索转义字符是什么?

19

我正在进行 MS SQL Server 全文搜索查询。我需要转义特殊字符,以便在包含特殊字符的特定术语上进行搜索。是否有内置函数可以转义全文搜索字符串?如果没有,您将如何处理?

1个回答

28

坏消息:没有方法。好消息:你不需要它(因为它也无济于事)。

我在我的一个项目中遇到了类似的问题。我的理解是,在构建全文索引时,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(或其他)中明确说明此行为的链接。但我找到了一篇官方文章,介绍了如何为全文搜索查询转换引号,这与上述描述的算法[隐含地]相符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接