我想用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运算符搜索我的全文索引?
由于
答案 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/