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" (带引号)那样强制整个世界。
我得到了一个数据库来管理它配置为全文搜索。不幸的是,我在这方面的经验有限,出现了一个问题,像这样的搜索“"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" (带引号)那样强制整个世界。