小编典典

SQL Server 2008中的FREETEXT查询不匹配词组

sql

我在SQL Server
2008中有一个全文索引表,我正在尝试使用FULLTEXT查询确切的短语匹配。我认为不适合使用CONTAINS或LIKE,因为在其他情况下查询可能不准确(用户不会在双引号中加上词组),并且总的来说,我希望自由文本的灵活性。

根据文档[MSDN]中的FREETEXT:

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

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

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

仅会在“描述”字段中出现“市政厅”一词的情况下返回结果,但我得到的结果是这样的:

1曼宁厅残障坡道设计。
2天线调查。客户:克兰斯顿市政府工程部
3有关国际网球名人堂火灾损失的结构调查。
4调查在“先驱大厅”进行拟议卫星设计的屋顶调查。
… 等等

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

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

1对马萨诸塞州昆西市政府大楼的外观进行了重大内部和内部装修
。2对波塔基特市政厅塔楼进行的结构设计调查受到泄漏的困扰。

我确定这是我不了解文档的一种情况,但是有什么方法可以实现我想要的?也就是说,能够传递不带引号的搜索字符串并准确获取我现在要获取的内容或带引号并仅获取确切的短语吗?


阅读 210

收藏
2021-04-22

共1个答案

小编典典

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

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

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

2021-04-22