2

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

选择不同的 FIELD1、FIELD2
来自 SomeTable
WHERE CONTAINS(*,'WORD1') AND CONTAINS(*,'WORD2*') AND CONTAINS(*,'WORD3')
选择不同的 FIELD1、FIELD2
来自 SomeTable
WHERE CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"')

我正在为我的全文搜索指定所有索引字段,那么为什么第二个命令只返回第一个命令返回预期结果?我想在一个 CONTAINS 语句中搜索任何字段具有 WORD1 和 WORD2 和 WORD3 的所有字段。

4

2 回答 2

1

我以前遇到过这个问题,这是设计使然。请参阅此 MS 支持文章

假设您有两列 c1 和 c2。您列出的查询

CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"')

被干扰为

CONTAINS(c1,'"WORD1" AND "WORD2*" AND "WORD3"') or CONTAINS(c2,'"WORD1" AND "WORD2*" AND "WORD3"')

所以每个单词都必须在任一列(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'))

在这种情况下(第一种情况),只要每个单词至少存在一个列中,不同的单词就可以存在于不同的列中。

于 2013-07-17T18:07:44.333 回答
0

看起来您的第二个语句正在搜索整个字符串 <"WORD1" AND "WORD2*" AND "WORD3">。这就是它不返回任何结果的原因。此外,正如所写,第一个也是用双引号搜索 <"WORD1"> 。它是否返回 <"WORD1"> 的任何结果?

于 2013-07-17T17:08:18.573 回答