SQL全文搜索 - 特殊字符

时间:2015-09-17 08:38:01

标签: sql tsql escaping 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[&]"')

这些都不起作用(找到" A&")。

1 个答案:

答案 0 :(得分:1)

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

  • 单词分词(空格,短划线,......)
  • 丢弃一些字符和单词(the,a,...)
  • 重新组合条款(治理,政府,管理......)

所有这些都取决于引擎和配置。

首先,您必须找出哪些exaclty被索引:是' AT& T'索引为(' AT' T')或(' AT T')或(' AT& T')。然后,如果它是' AT& T'和'&'被丢弃您必须使用特定于DB的转义字符在查询中转义它。例如,如果转义字符是' \'它可能是' AT& T'。在其他一些引擎上你必须强迫整个世界像#34; AT& T" (带引号)。