2

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

谢谢

4

2 回答 2

2

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

SELECT * FROM MY_TABLE
where not contains( *, 'name')

以供参考 :

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

于 2013-01-16T10:16:57.097 回答
1

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

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。答案)。

于 2021-03-31T09:58:41.567 回答