【问题标题】:SQL Full Text Search - Special CharactersSQL 全文搜索 - 特殊字符
【发布时间】:2015-09-17 08:38:00
【问题描述】:

我得到了一个数据库来管理,该数据库配置为全文搜索。不幸的是,我在这方面的经验有限,并且出现了一个问题,这样的搜索“AT&T”会返回正确的搜索结果,但搜索“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&”)。

【问题讨论】:

  • 您使用的是什么 dbms,最后一条语句的期望输出是什么?
  • 抱歉,我应该说 - SQL Server 2014

标签: sql tsql escaping full-text-search special-characters


【解决方案1】:

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

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

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

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

【讨论】:

  • 我正在使用 SQL Server 2014。有人知道转义字符吗?可能是“&”没有被索引。有谁知道我如何强制它被索引?
  • 你需要找出转义字符,现在你的查询看起来像这样:where Description like 'AT%' 你想要 where Description like 'AT[&]' ....i am不确定这是您在 dbms 中逃脱的方式。
  • 抱歉,我没有使用 SQL Server 的经验。
猜你喜欢
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多