我在Server 2008中有一个全文索引表,我试图使用全文查询一个确切的短语匹配。我不认为使用doesn或LIKE是合适的,因为在其他情况下,查询可能不准确(用户不使用双引号括起来短语),而且总的来说,我希望FREETEXT具有灵活性。
根据FREETEXT的文档MSDN:
如果freetext_string用双引号括起来,则执行短语匹配;词干和词库不执行。
这会让我相信这样的查询:
SELECT Description
FROM Projects
WHERE FREETEXT(Description, '"City Hall"') 只返回“市政厅”一词出现在“描述”字段中的结果,但我得到的结果如下:
1曼宁大厅残疾人坡道设计。 2天线调查。客户:克兰斯顿市工程部。 3国际网球名人堂火灾损害结构调查。 4前哨大厅卫星设计调查屋顶调查。 ..。等
显然,这些结果至少包括我短语中的一个词,而不是短语本身。更糟糕的是,我原以为结果会被排名,但我真正想要的两个结果(因为它们包含了实际的短语)被掩埋了。
SELECT Description
FROM Projects
WHERE Description LIKE '%City Hall%' 对马萨诸塞州昆西现有市政厅进行主要的外部和内部翻修 2 Pawtucket市政厅塔楼漏水的粗略结构调查。
我确信这是我不了解文档的情况,但是有什么方法可以实现我想要的吗?也就是说,能够在没有引号的情况下传递一个搜索字符串,得到我现在所得到的,或者引用,只得到确切的短语?
发布于 2010-12-16 16:33:59
正如您所说的,FREETEXT查找您短语中的每个单词,而不是作为一个全部。为此,您需要使用CONTAINS语句。如下所示:
SELECT Description
FROM Projects
WHERE CONTAINS(Description, '"City Hall"')如果你想得到结果的排名,你必须使用CONTAINSTABLE。它的工作原理大致相同,但它返回一个有两列的表: Key wich包含搜索表的主键和Rank,这给出了结果的排序。
https://stackoverflow.com/questions/4462875
复制相似问题