我正在执行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/

10-15 05:20