我正在执行 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(或其他内容)的链接。但我找到了official article它告诉我们如何转换全文搜索查询的引号,这[隐式]与上述算法一致。
关于sql-server - SQL Server 全文搜索转义字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/995478/