SQL Server中的Freetext查询2008不匹配短语
-
11-10-2019 - |
题
我在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包含搜索表和[等级]的主要键,这为您提供了结果的等级。
不隶属于 StackOverflow