sql-server - SQL Server 全文搜索转义字符?

标签 sql-server full-text-search

我正在执行 MS SQL Server 全文搜索查询。我需要转义特殊字符,以便可以搜索包含特殊字符的特定术语。是否有内置函数可以转义全文搜索字符串?如果没有,你会怎么做?

最佳答案

坏消息:没有办法。好消息:您不需要它(因为无论如何它都没有帮助)。

我在我的一个项目中遇到了类似的问题。我的理解是,在构建全文索引时,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(或其他内容)的链接。但我找到了official article它告诉我们如何转换全文搜索查询的引号,这[隐式]与上述算法一致。

关于sql-server - SQL Server 全文搜索转义字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/995478/

相关文章:

Mysql 匹配数字关键字

php - MySQL 全文搜索为行中出现的更多单词提供更高的排名大小

python - Flask 应用程序搜索栏

neo4j - neo4j全文搜索如何根据搜索匹配的百分比返回节点?

sql-server - SQL服务器: Can NT accounts be mapped to SQL server accounts

python - 使用python将csv文件写入SQL Server数据库

sql - 没有行但(XLOCK,ROWLOCK)锁定它?

sql - 从年/月而不是日期字段中选择滚动日期范围

sql - 从 2 个表中选择 2 个不同的值

mongodb - 如何使用 Elasticsearch 或其他搜索引擎?