4

我在 SQL Server 2008 中有一个全文索引表,我正在尝试使用 FULLTEXT 查询精确的短语匹配。我不相信使用 CONTAINS 或 LIKE 适合于此,因为在其他情况下查询可能不准确(用户不会用双引号括起短语),而且通常我想要 FREETEXT 的灵活性。

根据FREETEXT的文档[MSDN]:

如果 freetext_string 用双引号括起来,则改为执行短语匹配;不执行词干提取和词库。

这会让我相信这样的查询:

SELECT Description  
FROM Projects   
WHERE FREETEXT(Description, '"City Hall"')  

只会返回“市政厅”一词出现在“说明”字段中的结果,但我得到的结果如下:

1 曼宁大厅的障碍坡道设计。
2 天线调查。客户:克兰斯顿市工程部
3 对国际网球名人堂火灾损坏的结构调查。
4 调查 先驱大厅拟议卫星设计的屋顶调查。
... ETC

显然,这些结果至少包括我的短语中的一个单词,但不包括短语本身。更糟糕的是,我原以为结果会被排名,但我真正想要的两个结果(因为它们包括实际的短语)被埋没了。

SELECT Description  
FROM Projects  
WHERE Description LIKE '%City Hall%'  

1 昆西马萨诸塞州现有市政厅的主要外部和内部改造
2 对受泄漏困扰的 Pawtucket 市政厅塔楼进行粗略的结构调查。

我确定这是我不理解文档的情况,但是有没有办法实现我正在寻找的东西?即,能够在不带引号的情况下传递搜索字符串并获得我现在得到的确切内容,或者使用引号并只获得那个确切的短语?

4

1 回答 1

4

正如您所说,FREETEXT查找短语中的每个单词,而不是整个短语。为此,您需要使用该CONTAINS语句。像这样:

SELECT Description  
FROM Projects   
WHERE CONTAINS(Description, '"City Hall"')

如果你想获得结果的排名,你必须使用CONTAINSTABLE. 它的工作原理大致相同,但它返回一个包含两列的表:[Key] 包含搜索表的主键和 [Rank],它为您提供结果的排名。

于 2010-12-16T16:33:59.610 回答