SQL 全文搜索 - 特殊字符

SQL Full Text Search - Special Characters

我得到了一个数据库来管理它配置为全文搜索。不幸的是,我在这方面的经验有限,出现了一个问题,像这样的搜索“"AT&T"”会返回正确的搜索结果,但搜索“"AT&"”会返回包含 "AT" 而不是 "AT&"。

我猜这是因为“&”符号是一个特殊字符(?)

我的查询(正确运行)是:

SELECT TOP 1000 * FROM [DB_dev].[dbo].[Info] WHERE CONTAINS(Description, '"AT&T"')

仅返回描述包含 "AT&T".

的行

我遇到的问题是:

SELECT TOP 1000 * FROM [DB_dev].[dbo].[Info] WHERE CONTAINS(Description, '"AT&"')

返回包含 "AT".

描述的任何行

注意:我正在使用 SQL Server 2014 并尝试使用以下命令进行转义:

SELECT TOP 1000 * FROM [DB_dev].[dbo].[Info] WHERE CONTAINS(Description, '"AT&&"')

SELECT TOP 1000 * FROM [DB_dev].[dbo].[Info] WHERE CONTAINS(Description, '"AT%&"')

SELECT TOP 1000 * FROM [DB_dev].[dbo].[Info] WHERE CONTAINS(Description, '"AT\&"')

SELECT TOP 1000 * FROM [DB_dev].[dbo].[Info] WHERE CONTAINS(Description, '"AT[&]"')

None 其中作品(查找 "A&")。

通常全文引擎不会按原样索引文本,而是对其进行一些分析:

  • 分词(空格、破折号、...)
  • 丢弃一些字符和单词 (the, a,...)
  • 重新组合术语(govern、government、governing...)

这一切都取决于引擎和配置。

首先你必须找出exaclty被索引的是什么:'AT&T'被索引为('AT'和'T')或('AT T')或('AT&T').然后,如果它是 'AT&T' 并且 '&' 被丢弃,您必须在查询中使用数据库特定的转义字符对其进行转义。例如,如果转义符是“\”,它可能是 'AT\&T'。在其他一些引擎上,您将不得不像 "AT&T" (带引号)那样强制整个世界。