我获得了一个数据库,可以配置为全文搜索。不幸的是,我对这方面的经验有限,而且在这样的搜索中出现了一个问题:"" 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&")。
答案 0 :(得分:1)
通常,全文引擎不会按原样索引文本,而是对其执行一些分析:
所有这些都取决于引擎和配置。
首先,您必须找出哪些exaclty被索引:是' AT& T'索引为(' AT' T')或(' AT T')或(' AT& T')。然后,如果它是' AT& T'和'&'被丢弃您必须使用特定于DB的转义字符在查询中转义它。例如,如果转义字符是' \'它可能是' AT& T'。在其他一些引擎上你必须强迫整个世界像#34; AT& T" (带引号)。