【发布时间】:2011-05-26 15:51:10
【问题描述】:
我在 SQL Server 2008 中有一个全文索引表,我正在尝试使用 FULLTEXT 查询完全匹配的短语。我不相信使用 CONTAINS 或 LIKE 适合于此,因为在其他情况下查询可能不准确(用户不会用双引号将短语括起来)并且通常我希望 FREETEXT 具有灵活性。
根据documentation[MSDN] for FREETEXT:
如果 freetext_string 用双引号括起来,则改为执行短语匹配;不执行词干提取和词库。
这会让我相信这样的查询:
SELECT Description
FROM Projects
WHERE FREETEXT(Description, '"City Hall"')
只会返回“City Hall”一词出现在“描述”字段中的结果,但我会得到如下结果:
1 Manning Hall 的障碍坡道设计。
2 天线调查。客户:克兰斯顿市工程部
3 国际网球名人堂火灾损毁结构调查。
4 先驱厅拟建卫星设计的调查屋顶调查。
...等
显然,这些结果至少包括我的短语中的一个单词,但不包括短语本身。更糟糕的是,我原以为结果会被排名,但我真正想要的两个结果(因为它们包含实际的短语)被埋没了。
SELECT Description
FROM Projects
WHERE Description LIKE '%City Hall%'
1 昆西马萨诸塞州现有市政厅的主要外部和内部翻新
2 Pawtucket 市政厅塔楼的粗略结构调查受到泄漏的困扰。
我确定这是我不理解文档的情况,但有没有办法实现我正在寻找的东西?即,能够在不带引号的情况下传递搜索字符串并获得我现在得到的确切内容,或者使用引号并只获得那个确切的短语?
【问题讨论】:
-
我知道这是旧的,但我遇到了同样的问题,只是发现了这个错误报告:FREETEXT in SQL Server 2008 R2 no longer works as documented for "phrase searches"
标签: sql sql-server-2008 freetext