困惑是否使用FREETEXTTABLE或CONTAINSTABLE

时间:2009-11-06 23:34:29

标签: full-text-search

所以我正在使用SQL全文搜索,根据我的阅读,CONTAINS返回单词附近的匹配,而FREETEXT返回具有相似含义的单词,但是我找不到任何验证这一点的示例。

无论如何,到目前为止,我在一个表格上使用全文搜索,其中描述字段的最大长度为2500个字符,并希望在此处使用FTS。这个描述将包含食物成分,最好使用的东西,CONTAINS或FREETEXT?我希望用户搜索的内容类似于:

“蛋糕糖配方”

它应该返回排名靠前的结果,最好的结果是什么,FREETEXT还是CONTAINs?

2 个答案:

答案 0 :(得分:19)

我认为FREETEXT正是您所寻找的。

这是两个选项的良好比较:

http://www.sitepoint.com/blogs/2006/12/06/sql-server-full-text-search-protips-part-2-contains-vs-freetext/

如果使用CONTAINS,则WHERE变得复杂,因此您无法直接传递用户在搜索表单中输入的内容:

WHERE CONTAINS(notes, 'FORMSOF(INFLECTIONAL, recipe) or FORMSOF(INFLECTIONAL, cuisine)') 

但是,如果您使用FREETEXT,则直接在其中指定“搜索表单”:

WHERE FREETEXT(notes, 'recipe for cake sugar') 

我想如果你想搜索你的程序构建查询的东西,CONTAINS是有用的,因为它更强大,你有更多的控制权。另一方面,当您想要进行查询“google style”时,FREETEXT非常有用,您可以通过简单的语法(只是单词)来搜索要搜索的内容。

答案 1 :(得分:9)

CONTAINSTABLE

http://msdn.microsoft.com/en-us/library/ms189760(v=SQL.90).aspx 返回包含基于字符的数据类型的列的零行,一行或多行,以便对单个单词和短语进行精确或模糊(不太精确)匹配,在一定距离内的单词距离或加权匹配。可以在SELECT语句的FROM子句中引用CONTAINSTABLE,就像它是常规表名一样。

使用CONTAINSTABLE的查询指定包含类型的全文查询,该查询返回每行的相关性排名值(RANK)和全文密钥(KEY)。 CONTAINSTABLE函数使用与CONTAINS谓词相同的搜索条件。

FREETEXTTABLE

http://msdn.microsoft.com/en-us/library/ms177652(v=SQL.90).aspx 返回包含基于字符的数据类型的列的零行,一行或多行的表,这些列的值与指定的freetext_string中的文本的含义相匹配,但不是精确的措辞。可以在SELECT语句的FROM子句中引用FREETEXTTABLE,如常规表名。

使用FREETEXTTABLE查询指定自由文本类型的全文查询,该查询返回每行的相关性排名值(RANK)和全文密钥(KEY)。