困惑是否使用FREETEXTTABLE或CONTAINSTABLE

Dav*_*vid 17 full-text-search

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

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

"蛋糕糖配方"

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

ros*_*oft 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非常有用,您可以通过简单的语法(只是单词)搜索要搜索的内容.


小智 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).