mysql fulltext boolean NOT运算符

时间:2015-06-07 17:14:42

标签: mysql full-text-search not-operator

我正在布尔模式下进行MySQL FULLTEXT搜索。根据手册:

Note: The - operator acts only to exclude rows that are otherwise 
matched by  other search terms. Thus, a boolean-mode search that 
contains only terms preceded by - returns an empty result. It 
does not return “all rows except those containing any of the 
excluded terms.”

这是真的。

所以我使用NOT MATCH运算符:

SELECT COUNT(*) FROM Table WHERE MATCH (Column) AGAINST 
('bar' IN BOOLEAN MODE) AND NOT MATCH (Column) AGAINST 
('barbar' IN BOOLEAN MODE);

我的问题是:NOT MATCH字段中+运算符的作用是什么:是

AND NOT MATCH (Column) AGAINST ('foo bar' IN BOOLEAN MODE)

与:

相同
AND NOT MATCH (Column) AGAINST ('+foo +bar' IN BOOLEAN MODE)

由于

1 个答案:

答案 0 :(得分:2)

+运算符表示搜索文字存在。每MySQL Documentation

  

MySQL可以使用IN BOOLEAN MODE执行布尔全文搜索   修改。使用此修饰符,某些字符具有特殊含义   在搜索字符串中的单词的开头或结尾。在里面   在查询之后, + - 运算符表示单词是   分别需要现在或缺席

例如,下面的查询将检索包含单词MySQL但不包含单词YourSQL的所有行

SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
  

+   前导加号表示每个单词必须存在   返回的行。

修改

WHERE NOT MATCH (column) AGAINST ('+foo +bar' IN BOOLEAN MODE)应该意味着获取列的值不是foobar的所有行。它应该是negation

WHERE MATCH (column) AGAINST ('+foo +bar' IN BOOLEAN MODE)

是的,两者都不相同。

WHERE MATCH (column) AGAINST ('+foo +bar' IN BOOLEAN MODE)

表示获取列的值为foo和bar的所有行

WHERE MATCH (column) AGAINST ('foo bar' IN BOOLEAN MODE)

表示获取列的值为foo或bar的所有行

仔细检查文档。它说

  

[no operator]暗示OR

     

[+]暗示AND