0

我正在布尔模式下进行 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)

谢谢

4

1 回答 1

2

+运算符表示存在搜索文字。根据MySQL 文档

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. 它应该negationWHERE 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 的所有行

仔细检查文档。它说

[无运算符] 暗示 OR

[+] 意味着 AND

于 2015-06-07T17:30:51.230 回答