我在SQL Server 2008中有一个全文索引表,我正在尝试使用FullText查询确切的短语匹配。我不认为使用contains或喜欢适合此,因为在其他情况下,查询可能不是准确的(用户不会以双引号围绕短语),而且通常我想灵活地freetext。

根据 文档msdn]对于freetext:

如果将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市政厅塔。

我确定这是我不了解文档的情况,但是有没有办法实现我想要的东西?也就是说,能够在没有报价的情况下传递搜索字符串,并准确地获得我现在或用引号获得的内容,并仅获得确切的短语?

有帮助吗?

解决方案

如你所说, FREETEXT 查找短语中的每个单词,而不是所有单词。为此,您需要使用 CONTAINS 陈述。像这样:

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

如果您想获得结果的排名,则必须使用 CONTAINSTABLE. 。它的工作方式大致相同,但是它返回一个带有两个列的表:[键] Wich包含搜索表和[等级]的主要键,这为您提供了结果的等级。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top