所以我正在使用SQL全文搜索,根据我的阅读,CONTAINS返回单词附近的匹配,而FREETEXT返回具有相似含义的单词,但是我找不到任何验证这一点的示例。
无论如何,到目前为止,我在一个表格上使用全文搜索,其中描述字段的最大长度为2500个字符,并希望在此处使用FTS。这个描述将包含食物成分,最好使用的东西,CONTAINS或FREETEXT?我希望用户搜索的内容类似于:
“蛋糕糖配方”
它应该返回排名靠前的结果,最好的结果是什么,FREETEXT还是CONTAINs?
答案 0 :(得分:19)
我认为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)。