我正在布尔模式下进行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)
由于
答案 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)
应该意味着获取列的值不是foo
和bar
的所有行。它应该是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