SQL Server FREETEXT搜索AND逻辑未生效:结果不符合预期
SQL Server FREETEXT搜索不符合预期的解决办法
你遇到的问题是因为FREETEXT的匹配逻辑和你预期的不一样:
FREETEXT会把搜索字符串拆分成独立的词干,然后匹配包含任意一个词的行,哪怕加了双引号,也不会强制要求同时包含所有词。所以第二行只要有Canada就会被返回。
要实现“同时包含USA和Canada”的需求,有两种靠谱的写法:
方法一:用CONTAINS函数(推荐)
CONTAINS支持直接在搜索条件里指定逻辑关系,能精准控制匹配规则:
SELECT name FROM project WHERE CONTAINS(name, 'USA AND Canada')
这个语句会只返回同时包含USA和Canada的行,不管两个词的顺序和位置。如果需要匹配连续的短语USA Canada,可以用双引号包裹:
SELECT name FROM project WHERE CONTAINS(name, '"USA Canada"')
方法二:用多个FREETEXT条件组合
如果一定要用FREETEXT,可以把两个词拆成两个独立的FREETEXT条件,用AND连接:
SELECT name FROM project WHERE FREETEXT(name, 'USA') AND FREETEXT(name, 'Canada')
内容的提问来源于stack exchange,提问作者hsn
相关产品推荐
相关产品推荐

