SQL Server全文搜索NOT运算符

时间:2013-01-16 09:57:35

标签: sql-server full-text-search

我想用NOT运算符搜索我的全文索引。

SELECT * FROM CONTAINSTABLE(MY_TABLE, *, 'NOT name'),

以下例外:

Msg 7630, Level 15, State 3, Line 1
Syntax error near 'name' in the full-text search condition 'NOT name'.

有什么不对?如何使用 NOT运算符搜索我的全文索引?

由于

2 个答案:

答案 0 :(得分:1)

我是全文搜索的新手,但根据 documentation :

<块引用>

NOT 只能出现在 AND 之后,如 AND NOT。 OR NOT 运算符是 不允许。 NOT 不能在第一个术语之前指定

因此,在您的情况下,CONTAINSTABLE(MY_TABLE, *, 'NOT name') 被视为无效。 我发现将 NOT 运算符与 CONTAINSTABLE 一起使用的唯一方法如下:

SELECT * 
FROM CONTAINSTABLE({table_name}, *, N'{another_condition} AND NOT name')

@NG 提交的语法。当您不需要 RANK 信息时工作正常,但只要您需要,似乎您需要在 NOT 运算符之前添加另一个(虚拟)条件(这会非常混乱。 ..如果可以避免,请不要使用虚拟条件。

注意:在我看来,当您的论点是对结果进行排名时,在 CONTAINSTABLE 中只包含一个 NOT 运算符的概念并没有真正意义。事实上,如果这被允许,所有匹配结果将共享相同的排名值(因为它们不包含排除的标记)。 RANK 将成为无关信息,可以使用简单的 CONTAINS 代替 CONTAINSTABLE(参见 @NG. 答案)。

答案 1 :(得分:0)

而不是,你可以使用not contains:

SELECT * FROM CONTAINSTABLE
where not contains( *, 'NOT name')

供参考:

  

http://blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/