我想弄清楚为什么这两个陈述的行为不同
SELECT DISTINCT FIELD1, FIELD2 FROM SomeTable WHERE CONTAINS(*,'WORD1') AND CONTAINS(*,'WORD2*') AND CONTAINS(*,'WORD3')
SELECT DISTINCT FIELD1, FIELD2 FROM SomeTable WHERE CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"')
我为全文搜索指定了所有索引字段,为什么第二个命令只返回第一个命令返回预期结果?我想在一个CONTAINS语句中搜索任何字段中包含WORD1和WORD2和WORD3的所有字段。
答案 0 :(得分:1)
我之前遇到过这个问题而且它是设计的。请参阅此MS支持article。
假设您有两列c1和c2。您列出的查询
CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"')
是
CONTAINS(c1,'"WORD1" AND "WORD2*" AND "WORD3"') or CONTAINS(c2,'"WORD1" AND "WORD2*" AND "WORD3"')
所以每个字必须在EITHER列(c1或c2)中。如果WORD1在c1中且WORD3在c2中,则不会返回结果。
您的第一个查询有效,因为它是
(CONTAINS(c1,'WORD1') OR CONTAINS(c2,'WORD1')) AND (CONTAINS(c1,'WORD2*') OR CONTAINS(c2,'WORD2*')) AND (CONTAINS(c1,'WORD3') OR CONTAINS(c2,'WORD3'))
在这个(第一种情况)中,只要每个词存在于至少一个列中,不同的词就可以存在于不同的列中。
答案 1 :(得分:0)
看起来您的第二个语句正在搜索整个字符串<“WORD1”和“WORD2 *”以及“WORD3”>。这就是它没有返回结果的原因。另外,如上所述,第一个也将搜索<“WORD1”>用双引号。它是否返回<“WORD1”>的任何结果?