SQL全文搜索包含命令

时间:2013-07-17 16:54:21

标签: sql sql-server

我想弄清楚为什么这两个陈述的行为不同

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的所有字段。

2 个答案:

答案 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”>的任何结果?